【问题标题】:PHP doesn't display PDO error even if I set error handling [duplicate]即使我设置了错误处理,PHP 也不显示 PDO 错误 [重复]
【发布时间】:2015-07-13 01:45:14
【问题描述】:

我需要使用 PDO 在数据库中插入一行。但它不起作用,也没有打印任何错误,所以我不知道问题出在哪里。

连接正常,因为我可以运行 UPDATE 查询。

但是在这个查询中它会卡住而没有打印任何错误:

$dbtype     = "mysql";
$dbhost     = "xxx";
$dbname     = "xxx";
$dbuser     = "xxx";
$dbpass     = "xxx";

$db = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$sql = "INSERT INTO users (id, name) VALUES (:id,:name)";
$q = $db->prepare($sql);

$q->execute(array(
    ':id'=>$id,
    ':name'=>$name
));

除了这个命令还有其他的调试方法吗?

$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

【问题讨论】:

  • put print_r($conn->errorInfo());执行后得到什么错误?
  • 这总是空的:数组([0] => 00000 [1] => [2] =>)
  • 替换 :id -> id 和 :name -> name 不带 :.
  • @JackDavis 将您的代码放入 try and catch 块中,例如try { //your stuff } catch(PDOException $e) { echo $e->getMessage();}
  • @vanadium23 不,这没什么区别!

标签: php mysql exception pdo error-handling


【解决方案1】:

您可能关闭了error reporting,并且如果您的代码抛出异常,您不会尝试捕获异常。

因此,您必须将代码放入 try and catch 块中,例如

try {
    //your stuff
} catch(PDOException $e) {
    echo $e->getMessage();
}

因为您的 PDO 设置为在发生错误时抛出异常,所以您必须使用此块捕获它。此外,我建议您打开错误报告以获取有用的错误消息(仅在生产中暂存时)。

【讨论】:

  • 谢谢,这会返回错误。但奇怪的是$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 不起作用。我已启用所有警告和通知:error_reporting(E_ALL); ini_set('display_errors', 1); 好的,我将使用它进行调试,谢谢。 :)
  • @JackDavis 那么它可能不是一个致命错误,它不会从错误报告中得到显示,仅从捕获异常。
  • 这个答案自相矛盾。 IF 显示错误被关闭,那么应该没有 echo $e->getMessage();还有
【解决方案2】:

我遇到了同样的问题,没有看到来自 mysql 的任何错误消息。经过研究,问题似乎与 PHP 本身无关,而与 mysql 服务器配置有关。变量 lc_messages_dir 的默认值指向不存在的目录。在mysqld.cnf中添加一行后,重启mysql服务器,终于成功了。对我来说,以下是正确的:

lc_messages_dir=/usr/share/mysql

在mysql参考手册中有描述: https://dev.mysql.com/doc/refman/5.7/en/error-message-language.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-01
    • 2020-09-24
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 2022-01-18
    相关资源
    最近更新 更多