2016-12-29 185 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