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的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO 错误与错误处理

86)PHP,PDO常用函数

无法使用 PHP PDO 获取 SQL Server 打印消息

pdo知识点1

PHP的PDO

PDO 准备和执行查询总是返回错误