如果您的查询成功,PDO::errorInfo() 仍然返回一个数组。对于 MySQL 5.x,我得到以下结果...
数组
(
[0] => 00000
[1] =>
[2] =>
)
(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)
PDOStatement::errorInfo — 获取与语句句柄上的上次操作相关的扩展错误信息
此函数没有参数。
PDOStatement::errorInfo() 返回一个关于此语句句柄执行的上次操作的错误信息的数组。该数组至少包含以下字段
元素 | 信息 |
---|---|
0 | SQLSTATE 错误代码(ANSI SQL 标准中定义的五字符字母数字标识符)。 |
1 | 驱动程序特定的错误代码。 |
2 | 驱动程序特定的错误消息。 |
示例 #1 显示 PDO_ODBC 连接到 DB2 数据库的 errorInfo() 字段
<?php
/* 触发错误 -- BONES 表不存在 */
$sth = $dbh->prepare('SELECT skull FROM bones');
$sth->execute();
echo "\nPDOStatement::errorInfo():\n";
$arr = $sth->errorInfo();
print_r($arr);
?>
上面的例子将输出
PDOStatement::errorInfo(): Array ( [0] => 42S02 [1] => -204 [2] => [IBM][CLI Driver][DB2/LINUX] SQL0204N "DANIELS.BONES" is an undefined name. SQLSTATE=42704 )
如果您的查询成功,PDO::errorInfo() 仍然返回一个数组。对于 MySQL 5.x,我得到以下结果...
数组
(
[0] => 00000
[1] =>
[2] =>
)
说真的,errorInfo 是你的朋友。使用它。
如果这些看起来像你的谷歌搜索,那么你需要 errorInfo
"php 中没有显示数据库错误"
"pdo 从数据库中选择但不会插入"
"pdo 插入不起作用"
"pdo 只是一个炒作吗,我应该回到 mysql 吗?"
"外科医生赚多少钱?"
相信我,如果你养成在开发中使用它的习惯,它肯定会为你节省数小时的疯狂。忘记 E-ALL,它让我失望了,因为,E-ALL 显然不知道我在我的 MySQL 表中没有设置默认值,并且我的查询没有向其中添加任何内容。所以总是这样做
<?php
$sql = '在 mysql 表中执行某些操作,其中 foo = :bar';
$stmt = prepare($sql);
$stmt->bindValue(':bar', $foo, PDO::PARAM_[数据类型]);
$stmt->execute();
// 在开发期间非常重要。但在生产中将其关闭
$foo_arr = $stmt->errorInfo();
print_r($foo_arr);
// 示例 print_r 返回
/*
Array(
[0] => HY000
[1] => 1364
[2] => 字段“phone”没有默认值
)
我从未如此高兴地看到一个错误
*/
?>
虽然对于任何优秀的开发人员来说,始终注意并尝试捕获错误都是常见的做法,但即使是最优秀的开发人员也会犯错。这不是异常的替代方案,但其简单性是无价的。
可以在此处找到 Ansi sql state 错误代码
https://docs.oracle.com/cd/F49540_01/DOC/server.815/a58231/appd.htm