开发者社区 问答 正文

如何在PDO PHP中查看查询错误

try { $db = new PDO("mysql:host=".HOST.";dbname=".DB, USER, PW); $st = $db->prepare("SELECT * FROM c6ode"); } catch (PDOException $e){ echo $e->getMessage(); } 在上述情况下,如何检查查询的mysql错误?

展开
收起
保持可爱mmm 2020-05-10 19:32:41 442 分享 版权
1 条回答
写回答
取消 提交回答
  • 您需要将错误模式属性PDO :: ATTR_ERRMODE设置为PDO :: ERRMODE_EXCEPTION。 并且由于您期望prepare()方法会引发异常,因此应该禁用PDO :: ATTR_EMULATE_PREPARES * 功能。否则,MySQL服务器在执行之前不会“看到”该语句。

    setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $pdo->prepare('INSERT INTO DoesNotExist (x) VALUES (?)'); } catch(Exception $e) { echo 'Exception -> '; var_dump($e->getMessage()); } 打印(以我为例) Exception -> string(91) "SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.doesnotexist' doesn't exist" 参见http://wezfurlong.org/blog/2006/apr/using-pdo-mysql/ EMULATE_PREPARES = true似乎现在是pdo_mysql驱动程序的默认设置。从那时起,查询缓存的问题已得到修复/更改,并且使用mysqlnd驱动程序,我对EMULATE_PREPARES = false没问题(尽管我只是php爱好者,但请不要相信我的话……) *),然后是PDO :: MYSQL_ATTR_DIRECT_QUERY-我必须承认我不了解这两个属性的相互作用(还好吗?),所以我将它们都设置为 $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly', array( PDO::ATTR_EMULATE_PREPARES=>false, PDO::MYSQL_ATTR_DIRECT_QUERY=>false, PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION ));来源:stack overflow
    2020-05-10 19:33:35
    赞同 展开评论