【问题标题】:Under what conditions will PDO:execute() return false?在什么情况下 PDO:execute() 会返回 false?
【发布时间】:2015-03-06 14:58:31
【问题描述】:

根据http://php.net/manual/en/pdostatement.execute.php,成功返回TRUE,失败返回FALSE。

什么是成功或失败?

我已经测试过它并返回一个空集或由于 WHERE 子句没有插入一行。

只有在 SQL 无效的情况下才会这样做吗?如果是这样,这不会也抛出异常吗?

【问题讨论】:

  • 出错时返回false。由于缺少连接等原因,可能会出现参数不正确的情况。
  • @JayBlanchard 我 try 它,如果查询不起作用,则有一个 catch 块。

标签: php exception pdo


【解决方案1】:

它将在任何无法成功执行的查询上返回false。造成这种情况的原因可能包括断开的数据库、查询语法错误、您试图调用未定义的 SQL 函数等。空结果集不是失败。

【讨论】:

  • 所有这些条件也会抛出异常吗?我问的原因是我有一个 try catch 块,它将回滚任何更改。我需要测试它返回什么,还是catch 块也会被执行?
  • 您需要显式设置 PDO 以引发异常。默认情况下它不会。 php.net/manual/en/pdo.error-handling.php 如果你这样做了,execute() 应该抛出异常而不是返回 false
  • 啊,有道理。我在创建连接时总是包含PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,而且我从未见过他们不抛出异常。是否可以依赖异常,还是应该对其进行测试并在不成功时手动抛出异常?
  • 异常应该是完全可靠的。
【解决方案2】:

当您没有启用抛出异常时,SQL 错误、连接断开等。

【讨论】:

  • 当启用抛出异常时,永远不会?
  • 正确,在返回 false 之前会抛出 PDOException
  • 如果查询中列出了参数但执行中没有提供参数,它也可能返回 false
  • 但是你最新的例子也会抛出异常,对吗?
  • 是的,它会抛出异常 PARAMS_NOT_BOUND 什么的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2018-04-26
  • 2011-03-20
  • 2020-02-07
  • 2020-11-04
  • 1970-01-01
相关资源
最近更新 更多