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

wir*_*ark 0 php mysql pdo

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

PS:$ database-> get()是一个SELECT返回单行的简单PDO .我不认为它是相关的,我认为我的例子也适用于没有框架的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.");
}
Run Code Online (Sandbox Code Playgroud)

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

if (!$q1) { echo "No result"; }
if (!$q2) { echo "No result"; }
...
Run Code Online (Sandbox Code Playgroud)

有更通用的方法吗?

Mjh*_*Mjh 5

您的逻辑是错误的,Exception是在程序执行期间发生的事件,它会破坏正常流程.

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

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

能言善辩,这是Laravel使用的ORM包含一个名为方法firstOrFail以及findOrFail它们执行你以后.

您可以选择创建这样的方法Medoo或使用适当的ORM,例如Doctrine或Eloquent,它们可以帮助您实现开箱即用的此类行为.