pdo 中的 errorinfo 函数总是在 medoo lib 中返回 0000
Posted
技术标签:
【中文标题】pdo 中的 errorinfo 函数总是在 medoo lib 中返回 0000【英文标题】:errorinfo function in pdo always return 0000 in medoo lib 【发布时间】:2016-09-24 03:45:18 【问题描述】:我使用 medoo mysql 框架。
它工作得很好,并为所有操作(如更新/删除和...)返回错误...
但不适用于插入。
当我插入错误的数据(或使用错误的列名)时,它会为最后插入的 id 返回 0,但也会为 $database->error()
返回 0000!
这是我的一些设置:
error_reporting(E_ALL);
ini_set('display_errors', 1);
和
'option' => [
PDO::ATTR_CASE => PDO::CASE_NATURAL,
PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
]
如何强制它显示错误?
我使用 php7.0.10 和 Ampps 和 mysql 版本 5.6.31/(localhost windows10)
【问题讨论】:
您需要发布一个完整的代码示例,展示您如何实现 PDO 数据库连接和选项。 ***.com/questions/32648371/…的可能重复 【参考方案1】:这是因为 insert() 返回最后插入的 ID。 medoo 代码如下所示:
$this->exec('INSERT INTO ' . $this->table_quote($table) . ' (' . implode(', ', $columns) . ') VALUES (' . implode($values, ', ') . ')');
$lastId[] = $this->pdo->lastInsertId();
return count($lastId) > 1 ? $lastId : $lastId[0];
现在,如果你把它放在第 1 行和第 2 行之间:
var_dump($this->pdo->errorInfo());
您会从 INSERT 命令中收到错误消息。 medoo 当前(2016 年 11 月)处理此问题的方式是,您会收到 lastInsertId() 错误消息,该消息始终为 0000(因此没有错误)。
两种解决方案
对于 INSERT,您可以使用 query() 方法,构建自己的 INSERT 查询并像往常一样使用 error()。
或者您可以将以下内容放入您的配置中
'option' => [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION],
然后总是在 try-catch 中使用 insert():
try
$db->insert("table", ["column1" => "value1"]);
catch (Exception $e)
echo $e->getMessage();
现在你会得到例如:
SQLSTATE[23000]:违反完整性约束:1062 键“PRIMARY”的重复条目“value1”
【讨论】:
以上是关于pdo 中的 errorinfo 函数总是在 medoo lib 中返回 0000的主要内容,如果未能解决你的问题,请参考以下文章