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