PDO - 如果这些查询中的任何一个返回空结果,则捕获

时间:2016-12-29 11:05:52

标签: php mysql pdo

我正在使用Medoo(使用PDO的PHP DB框架)并启用了PDO :: ERRMODE_EXCEPTION。我在trycatch块中有一些查询,如果其中任何一个查询返回空结果,我想抛出异常。

PS:$database->get()是一个返回单行的简单PDO SELECT。我不认为这是相关的,我认为我的例子也适用于没有框架的PDO。

try {
    $q1 = $database->get(..);
    $q2 = $database->get(..);
    $q3 = $database->get(..);
    $q4 = $database->get(..);
} catch (PDOException $e) {
    die ("There was an error in a query.");
}

现在我只有在查询中出现错误时才会进入catch块,就像我尝试选择一个不存在的表一样。我想找到避免检查每个查询是否都不会手动返回空结果的最佳方法,比如我不想这样做:

if (!$q1) { echo "No result"; }
if (!$q2) { echo "No result"; }
...

是否有更通用的方法?

1 个答案:

答案 0 :(得分:5)

您的逻辑错误,Exception是在程序执行期间发生的事件,会中断正常流程。

返回空结果集的查询会中断程序的正常流程,因为该查询已成功执行。

如果您认为使用异常以表示返回空结果是个好主意,则必须抛出该异常。

Eloquent,是Laravel使用的ORM,包含一个名为firstOrFailfindOrFail的方法,可以执行您所追求的内容。

您的选择是为Medoo创建这样的方法,或者使用正确的ORM(如Doctrine或Eloquent)来帮助您实现开箱即用的此类行为。