【发布时间】:2019-11-13 13:40:06
【问题描述】:
我正在尝试使用 PHP PDO 更新我的数据库,当发出错误的 sql 语句时它会失败,没有任何错误或在我的情况下出现异常。
请注意,我使用的不是$pdo->prepare(),而是$pdo->query()。
我使用 ERRMODE_EXCEPTION 选项。
我阅读了许多关于PDO::ATTR_EMULATE_PREPARES 选项的其他线程和示例(like this one。
让我写一些代码:
$Qs = <<<EOT
UPDATE my table where somevar = "this";
UPDATE my othertable where thisitem = "that";
INSERT INTO tablex (col1, col2,col3,invalid_col) VALUES (val1,val2,val3,val4);
INSERT INTO tabley (col1, col2,col3) VALUES (val1,val2,val3);
EOT;
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ,
/* disabled ! PDO::ATTR_EMULATE_PREPARES => false,*/
];
$pdo = new PDO(dsn,user,password, $options);
try{
$pdo->query($Qs);
catch(exception $e)
{
echo 'an error occurred' . $e->getmessage();
}
next_instruction();
在这段非常接近我的代码中,永远不会抛出异常! 为什么 ?如果我不使用准备! 请注意,如果我启用 ATTR_EMULATE_PREPARES,它会运行良好。
有人可以解释这种行为吗?我应该打开一个错误请求吗?
再见!
[编辑]
我找到了一些解决方法。
1st:我将每一行拆分为一个数组,然后针对 $pdo->query() 运行该数组。 然后我添加了我在错误时抛出的异常。我在某处读到 mysql 不接受同时多个查询。也许这就是我的 sql 查询错误时行为不正确的地方。
第 2 次:当我在数据库中创建新触发器时,每次都失败并出现错误 Cannot execute queries while other unbuffered queries are active。我正在使用 $pdo->queries() 添加它们。切换到 $pdo->prepare() 没有任何问题。
【问题讨论】:
-
这个问题过于宽泛和令人困惑,无法在 Stack Overflow 上讨论。目前还不清楚你的问题是什么。如果您仍有任何疑问,我的 PDO 教程中会解释所有内容,尤其是在 running multiple queries 部分。