pdo查找mysql语句错误_如何在PDO PHP中查看查询错误

您需要将错误模式属性PDO :: ATTR_ERRMODE设置为PDO :: ERRMODE_EXCEPTION.

由于您希望prepare()方法抛出异常,因此应禁用PDO :: ATTR_EMULATE_PREPARES *功能.否则,MySQL服务器在执行之前不会“看到”该语句.

try {

$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');

$pdo->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

));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值