php pdo 错误捕获,php – 为什么PDO异常错误没有被捕获?

您对setAttribute()的调用缺少第一个参数:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

如果你没有得到一个

Warning: PDO::setAttribute() expects exactly 2 parameters, 1 given

您的error_reporting level对于开发服务器来说太低了/和/或者您没有关注the error log或没有设置display_errors=On(您更喜欢它;我更喜欢错误日志而不是display_errors).

编辑:请试试

echo 'php version: ', phpversion(), "\n";

try {

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

echo 'client version: ', $dbh->getAttribute(PDO::ATTR_CLIENT_VERSION), "\n";

echo 'server version: ', $dbh->getAttribute(PDO::ATTR_SERVER_VERSION), "\n";

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

}

catch(PDOException $err) {

var_dump($err->getMessage());

die('...');

}

$id = 'foo';

try

{

$stmt = $dbh->prepare("SELECT COUNT(*) FROM Product WHERE `non-existent_column`=?");

$stmt->bindValue(1, $id, PDO::PARAM_INT);

$stmt->execute();

$row = $stmt->fetchColumn();

}

catch(PDOException $err)

{

var_dump($err->getMessage());

var_dump($dbh->errorInfo());

die('....');

}

echo 'done.';

印在我的机器上

php version: 5.3.5

client version: mysqlnd 5.0.7-dev - 091210 - $Revision: 304625 $

server version: 5.5.8

string(94) "SQLSTATE[42S22]: Column not found: 1054 Unknown column 'non-existent_column' in 'where clause'"

array(3) {

[0]=>

string(5) "42S22"

[1]=>

int(1054)

[2]=>

string(54) "Unknown column 'non-existent_column' in 'where clause'"

}

....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值