php - 为什么 mysql PDO 失败时不会抛出错误

标签 php mysql sql pdo

我正在尝试使用 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,效果会很好。

有人可以解释一下这种行为吗?我应该提出错误请求吗?

再见!

[编辑]

我找到了一些解决方法。

第一:我将每一行拆分为一个数组,然后针对 $pdo->query() 运行该数组。 然后我添加了错误抛出的异常。我在某处读到 mysql 不接受同时多个查询。也许这就是我的 sql 查询在错误时行为不正确的原因。

第二:当我在数据库中创建新触发器时,每次都会失败,并出现错误 Cannot execute queries while other unbuffered queries are active 。我使用 $pdo->queries() 来添加它们。切换到 $pdo->prepare() 完成工作,没有任何问题。

最佳答案

ERRMODE_WARNING 导致 PDO 发出警告而不是异常。

如果您想要异常(exception),请使用ERRMODE_EXCEPTION

参见https://www.php.net/manual/en/pdo.error-handling.php了解更多信息。

关于php - 为什么 mysql PDO 失败时不会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58838437/

相关文章:

php - 查询是来自 jquery 的空 mysql php 变量

php - 是否可以在 MYSQL JOIN 语句中使用 AND 子句?

mysql - 表 MYSQL 的 key 文件不正确

c# - 如何根据数据库中的数字字段填充动态下拉列表?

mysql - 如何统计表中每个外键 ID 的实例数?

sql - PIG查询可对行和列进行计数,以计数行数

php - Echo 从 count(*) mysql 查询返回的值

php - paypal api沙箱和实时发送错误10501在第二次调用

php - 如何从 mysql 数据库检索图像并在 php 中回显它?

mysql - 查询以获取仅在一个位置或两个位置的 ID