我使用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)
答案 0 :(得分:2)
这是因为 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的方式(Nov '16)处理这个,你得到 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”