pdo中的errorinfo函数总是在medoo lib中返回0000

时间:2016-09-24 03:45:18

标签: php mysql database pdo

我使用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)

1 个答案:

答案 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(所以没有错误)。

两个解决方案

  1. 对于INSERT,您可以使用 query()方法,构建自己的INSERT查询并像往常一样使用 error()

  2. 或者您可以在配置中添加以下内容

    'option' => [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION],
    
  3. 然后始终在try-catch中使用 insert()

    try {
        $db->insert("table", ["column1" => "value1"]);
    } catch (Exception $e) {
        echo $e->getMessage();
    }
    

    现在你可以得到例如:

      

    SQLSTATE [23000]:完整性约束违规:1062密钥“PRIMARY”的重复条目“value1”