PHP PDO 错误消息作为变量在电子邮件中发送

Posted

技术标签:

【中文标题】PHP PDO 错误消息作为变量在电子邮件中发送【英文标题】:PHP PDO Error Message as a Variable to send in email 【发布时间】:2013-03-11 12:28:19 【问题描述】:

php 中从 mysql 切换到 PDO。过去,当一个查询运行并且由于某种原因没有被执行时,我可以给自己发送一封邮件,邮件正文中包含 mysql_error() 消息,如下所示:

$query = "SELECT dogs FROM animals";
$res = mysql_query($query);

if (!$res) 
    $error = "Error Message: " . mysql_error();
    mail("my@email.com","Database Error",$error);

因此,当网站上的数据库出现问题时,我会收到一个 emil 警报。

我的 PDO 设置如下:

setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

我在 PDO 连接本身中有一个 try catch,但我想在它们发生时获取错误消息以进行准备和执行:

$query = "SELECT cats FROM animals";
$sql = $pdo->prepare($query);

if (!$sql->execute()) 
  $error = "Error Message: " . (pdo error message here);
  mail("my@email.com","Database Error",$error);

关于如何在电子邮件主题中分配 PDO 错误消息的任何想法?如果准备使用 errorInfo() 失败,但在执行错误(例如数组的无效参数计数)时,我可以获得逻辑错误消息,我似乎无法收到错误消息。

感谢所有帮助。

【问题讨论】:

【参考方案1】:

你可以使用:

$query = "SELECT cats FROM animals";
$sql = $pdo->prepare($query);

if (!$sql->execute()) 
  $arr = $sql->errorInfo();
  $error = print_r($arr, true);

  mail("my@email.com","Database Error",$error);

【讨论】:

感谢卡洛斯的重播。我确实尝试过,但我只是得到了这个: Array ( [0] => HY093 [1] => [2] => ) 没有真正解释问题是什么。 你肯定有一个不正确绑定的变量。您确定 $query = "SELECT cats FROM animals"; 是您要执行的 SQL 吗?如果你实际上是用 :variable 绑定一些变量,你需要注意 bindParam 和 bindValue,它们有点不同。首先,只需使用 bindValue 即可接受你扔给它的任何东西。 我很清楚绑定。我写了一个简单的查询只是为了得到消息。如果动物中不存在猫这一列,我想得到一个错误。【参考方案2】:

使用 try/catch

try 
    $sql->execute();
 catch (PDOException $e) 
    $e->getMessage(); // This function returns the error message

【讨论】:

感谢zjd的回复。是的,我也试过这样:try $sql->execute($pdo_data); 捕捉 (PDOException $e) $error = $e->getMessage(); mail("me@mail.com","数据库错误",$error);但我得到这个 PHP 错误:CFatal error: Call to a member function execute() on a non-object 并且整个脚本停止。它不会在 catch 块中输出任何内容。 您得到的错误是因为$sql 没有与之关联的函数execute()。你确定你的脚本中还有$sql = $pdo->prepare($query);吗?如果是这样,你在哪里初始化$pdo。此外,您可以将代码包装在“`”符号中,它会在这些 cmets 中显示得更好。 我做到了。现在它可以工作了,因为我在 setAttribute() 中将 ERRMODE_WARNING 更改为 ERRMODE_EXCEPTION。改变之后,它成功了。再次感谢您的帮助。

以上是关于PHP PDO 错误消息作为变量在电子邮件中发送的主要内容,如果未能解决你的问题,请参考以下文章

使用 nodemailer 在 Node.JS 中发送电子邮件(错误:554 6.6.0 发送消息以进行传递时出错)

无法在Codeigniter中发送电子邮件,没有错误消息。本地或远程

PHP/MySQL/PDO - 结果错误但没有数据库错误消息?

php smtp 无法在 ubuntu 服务器中发送电子邮件

送电子书福利啦!

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE [42000]:语法错误或访问冲突 PHP 和 PDO