2016-12-29 188 views
0

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

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"; } 
... 

是否有一个更通用的方法?

+2

如果你想捕捉一个异常,你必须先*抛*。 –

+0

这不会让我为每个查询手动执行吗? – wiredmark

+0

你有什么想法吗?您有一个自定义条件,您希望抛出异常。或者根据get()为你创建另一个getOrFail()方法。 –

回答

5

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

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

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

Eloquent,这是Laravel使用的ORM包含一个名为firstOrFailfindOrFail它们执行你以后方法。

您的选择是为Medoo创建一个这样的方法,或者使用适当的ORM,例如Doctrine或Eloquent,这可以帮助您实现这种开箱即用的行为。

+0

谢谢@Mjh。 – wiredmark