2014-07-03 56 views
0

在catch子句中,如何確定哪個準備好的語句導致了錯誤,以便我可以在其上應用debugDumpParams?看下面的例子。確定哪個準備好的語句在try/catch中導致錯誤

$p1=db::db()->prepare("INSERT INTO t1 (a,b,c) VALUES (:a,:b,:c)"); 
$p2=db::db()->prepare("INSERT INTO t2 (a,b,c) VALUES (:a,:b,:c)"); 
try{ 
    $data=array('a'=>1,'b'=>2,'c'=>3); 
    $p1->execute($data); 
    $p2->execute($data); 
} 
catch(PDOException $e){ 
    //Display debugDumpParams() for the statement that caused the error 
} 
+0

評論並嘗試一次一個 – cmorrissey

+0

獨立的try-catch每個 –

+0

@cmorrissey。不理想,因爲我想要所有查詢的通用捕獲。 – user1032531

回答

1

確定哪個查詢失敗在不同的try catch塊中執行它們。

$data=array('a'=>1,'b'=>2,'c'=>3); 

$p1 = db::db()->prepare("INSERT INTO t1 (a,b,c) VALUES (:a,:b,:c)"); 
try {  
    $p1->execute($data); 
} catch(PDOException $e) { 
    // Display debugDumpParams() for the statement that caused the error 
    // First query has failed 
} 
$p2 = db::db()->prepare("INSERT INTO t2 (a,b,c) VALUES (:a,:b,:c)"); 
try {  
    $p2->execute($data); 
} catch(PDOException $e) { 
    // Display debugDumpParams() for the statement that caused the error 
    // Second query has failed 
} 
0

您可以檢查每個語句的error code。 (閱讀有關您的數據庫代碼的文檔)。 null表示該語句未執行。

0

如果您要捕獲PDOException,您可能還需要在try catch中包含prepare(),並且如果可能的話,還應該使用一個查詢來插入。

準備返回false當它失敗所以檢查$ P的值,並拋出異常

相關問題