【问题标题】:PDO errorCode doesn't work with preparePDO 错误代码不适用于准备
【发布时间】:2011-09-23 17:03:40
【问题描述】:
$sql = "dSELECT * FROM users";
$dbQuery = $this->dbal->query($sql);
$dbError = $this->dbal->errorInfo();

$dbError 获取语法错误信息。

如果对prepared语句使用相同的语句,prepare后不会返回任何错误。

此代码来自 php.net

<?php
/* Provoke an error -- bogus SQL syntax */
$stmt = $dbh->prepare('bogus sql');
if (!$stmt) {
    echo "\nPDO::errorInfo():\n";
    print_r($dbh->errorInfo());
}

ErrorInfo 不能以这种方式工作。 我用

$dbQuery = $this->dbal->prequery($sql);
$dbError = $dbQuery->errorInfo(); // $this->dbal->errorInfo(); doesn't work, too.

【问题讨论】:

  • 你试过this answer吗?
  • 试过了,但没有一个奏效。实际上,默认情况下是静默模式,它适用于 dbal->query。
  • 当我使用: $this->dbal->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); var_dump(\PDO::ATTR_ERRMODE);每次返回 3.SILENT、Warning 或 Exception 它返回 3.

标签: php pdo prepare


【解决方案1】:

manual 说:

如果数据库服务器成功 准备语句,PDO::prepare() 返回一个 PDOStatement 对象。如果 数据库服务器无法成功 准备语句,PDO::prepare() 返回 FALSE 或发出 PDOException (取决于错误处理)。

这意味着当它失败时你没有对象:你有一个布尔值FALSE

尝试将PDO error handling 更改为PDO::ERRMODE_EXCEPTION

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 2013-05-06
    • 1970-01-01
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多