PHP PDO fetch 在未找到记录且失败时返回 FALSE

6 php mysql pdo exception-handling fetch

PDO 方法fetch()FALSE在未找到记录失败时(例如,当数据库访问出现问题时返回值。

我需要能够区分这两种情况并以相应的方式处理每一种情况:

  • 当没有找到记录时向用户显示一条消息,并且
  • 失败时抛出异常。

所以,我的问题是:有没有办法以适当的方式处理结果?

感谢您的时间。

PS:我本来希望收到一个空数组作为结果,当没有找到记录时,以及FALSE出现问题时的值。就像在fetchAll()方法的情况下一样。


更新:

该方法PdoStatement::fetch在失败时抛出异常,而不是FALSE. 这种情况在我的回答中得到了证明:

总之,正如@pucky124 已经说过的,差异化很容易实现:

  • PDOStatement::fetchFALSE如果没有找到记录,则返回。
  • PDOStatement::fetch 失败时抛出异常。

小智 5

PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION就是为了。像这样使用它:

$pdo = new PDO(
            'mysql:host=localhost;port=3306;dbname=mydb;charset=utf8'
            , 'user'
            , 'pass'
            , [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]
    );
Run Code Online (Sandbox Code Playgroud)

当以这种方式使用时,错误实际上会作为异常抛出。这意味着如果 fetch(或使用此 pdo 对象的其他方法)发生错误,将抛出异常并且该方法实际上根本不会返回。这是处理 PDO 中错误的一种非常有效的方法。现在您知道,如果 fetch 返回一个值,则不会发生错误,因此如果它为 false,则查询不返回任何记录。