我在PHP中使用PDO。我已经设法让第一个Insert运行但我无法获得第二个。我按下按钮运行它们。这是我的两个基本SQL查询。
INSERT INTO MockTable (
`A`, `B`, `C`, `D` )
SELECT `A`, `B`, `C`, `D`
FROM SecondaryTable
ORDER BY A ASC;
UPDATE MockTable
SET
`Name` = From Form,
`Date` = Actual Date
WHERE
`Name` = ''
AND `Date` = '0000-00-00';
我正在使用
.$_POST["Name"].
.date("Y-m-d").
名称和日期
PHP代码(真的很乱,因为我试图解决它):
<?php
if(isset($_POST["submit"])){
try {
require '/home4/kylex63/MockUpConfig.php';
$sql = "
INSERT INTO MockTable (`A`, `B`, `C`, `D`)
SELECT `A`, `B`, `C`, `D`
FROM SecondaryTable
ORDER BY A ASC;
UPDATE `MockTable`
SET `Name` = ".$_POST["Name"].", `Date` = ".date("Y-m-d")."
WHERE `Name` = \'\'
AND `Date` = \"0000-00-00\";
";
if ($db->query($sql)) {
echo "<script type= 'text/javascript'>alert('New Record Inserted Successfully');</script>";
}
答案 0 :(得分:1)
您应该使用预准备语句来避免SQL注入,然后使用没有引号的?
占位符。我也会一次执行一条语句,因此如果第一个或第二个语句失败,您可以控制需要发生的事情:
$db->query("
INSERT INTO MockTable (`A`, `B`, `C`, `D`)
SELECT `A`, `B`, `C`, `D`
FROM SecondaryTable
ORDER BY A ASC");
$stmt = $db->prepare("
UPDATE MockTable
SET `Name` = ?, `Date` = ?
WHERE `Name` = ''
AND `Date` = '0000-00-00'");
$stmt->execute(array($_POST["Name"], date("Y-m-d")));
echo "<script type= 'text/javascript'>
alert('New Record Inserted Successfully');
</script>";
这应该使UPDATE
按预期工作。
您最好将错误处理策略设置为PDO::ERRMODE_EXCEPTION
:
PDO::ERRMODE_EXCEPTION
除了设置错误代码之外,PDO还会抛出PDOException并设置其属性以反映错误代码和错误信息。此设置在调试过程中也很有用,因为它会有效地“爆炸”#34;在错误点处的脚本,非常快速地指出代码中潜在的问题区域(记住:如果异常导致脚本终止,事务会自动回滚)。
异常模式也很有用,因为您可以比使用传统的PHP样式警告更清楚地构建错误处理,并且使用较少的代码/嵌套,而不是在静默模式下运行并显式检查每个数据库调用的返回值。
有关PHP中的异常的更多信息,请参阅Exceptions。
设置此错误处理程序策略的代码(在初始化连接后立即执行):
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
通过在php.ini
中设置error_reporting和display_errors指令appropriately,确保报告所有例外和警告。