【问题标题】:what to do on PHP PDO execute() returns false?PHP PDO execute() 返回 false 怎么办?
【发布时间】:2014-03-03 11:25:15
【问题描述】:

php 手册 (http://www.php.net/manual/en/pdostatement.execute.php) 在 Return Values 中提到:“成功时返回 TRUE,失败时返回 FALSE。”

我正在编写一个带有多个 PDO::execute 语句的 php 脚本。当 PHP:PDO 确实返回 FALSE 时应该怎么做?停止整个脚本(调用exit())或继续或其他? Execute() 返回 false 的可能原因是什么?或者返回 false 只是一个非常理论化的场景,在卷轴直播中几乎从未发生过?

【问题讨论】:

  • 如果您尝试进行数据库架构不允许的更改,它可能会返回 false,因为唯一值、外键、重复条目等约束。

标签: php


【解决方案1】:

这取决于查询执行对您的程序的重要性。 没有处理/忽略它的标准方法。

使用 PDO 的errorCode() / errorInfo() 函数可能会对您有所帮助,因此您可以以不同的方式处理不同的错误。

查看errorCode() 手册页中给出的第一个示例,其中execute() 失败。

【讨论】:

    【解决方案2】:

    这真的取决于你执行什么样的查询。如果它是事务的一部分,您可能想要回滚它。 如果它对后续程序执行至关重要,您肯定会想要停止它并显示错误消息。 如果您的程序可以在没有它的情况下生存,您可以忽略它或以您认为正确的任何方式处理。

    出现错误时返回 false。这可能是由于缺少连接、参数不正确等原因造成的。

    【讨论】:

    • 谢谢。我相信我在某处读到过(我不是 sql 专家),在 MySQL 中使用 COMMIT 和 ROLLBACK (?) 有一些限制,但我必须再次查找。我确实从您的回答中得出结论,无论如何建议实施错误管理......
    • 有不同的存储引擎,它们处理事务的方式可能不同。我也不是这个主题的专家,但我自己在 mysql 中的事务方面没有遇到任何问题。错误管理无疑是一个好方法。然而,实现它的最佳方式仍然取决于谁以及如何使用它。
    【解决方案3】:

    冒着写出不受欢迎的答案的风险,我不完全确定在使用PDO::ERRMODE_EXCEPTION 时检查PDOStatement::execute() 的返回值是否值得努力,应该这样做。或者,在您提出问题时回答您的问题,PDOStatement::execute() 返回FALSE PDO::ERRMODE_EXCEPTION 下确实似乎是一个相当理论上的场景 - 如果确实发生了,您的请求(如果没有整个 Apache 进程)很可能注定要失败。

    the source code of PDOStatement::execute 中“真正”出现的 RETURN_FALSE 很少见。我所说的“正版”是指没有被注释掉,也没有关注PDO_HANDLE_STMT_ERR(其中is justpdo_handle_error,其中does as it says在名称中)。事实上,PDOStatement::execute 可能返回FALSE 的唯一情况似乎是内存分配错误,即very likely to be unrecoverable

    【讨论】:

    • 当我尝试使用命名占位符两次时,PDOStatement::execute() 为我返回了 false。 PDO::errorInfo() 对解决这个问题没有帮助,因为它只给了我关于前一个有效查询的信息,
    猜你喜欢
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多