2014-01-07 37 views
0

我剛開始使用PDO,我有這個代碼在我的表中插入值。用PDO插入。我應該使用try ... catch嗎?

$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); 
$sql = "INSERT INTO lists (ID, Title, Timestamp, Plays, Likes) 
VALUES (:ID, :Title, :Timestamp, :Plays, :Likes)"; 
$q = $dbh->prepare($sql); 
$q->execute(array(':ID'=>$list[$i]["id"], 
       ':Title'=>$list[$i]["title"], 
       ':Timestamp'=>$list[$i]["timestamp"], 
       ':Plays'=>$list[$i]["playcount"], 
       ':Likes'=>$list[$i]["likes"])); 

從閱讀在論壇上,我明白,有時候我需要使用try ...搭上安全reasons.I真的很迷茫......對我來說,我應該爲了改變什麼使用try ... catch ???

非常感謝!

+0

「出於安全原因」 ---從什麼「安全」? – zerkms

+0

我認爲這是錯誤處理?因爲我讀過「如果你的應用程序沒有捕獲到PDO構造函數拋出的異常,則默認採取的操作是終止腳本並顯示回溯,這種回溯可能會顯示完整的數據庫連接細節。」 – CharleyB0y

+0

我們不知道您的應用程序是如何構建的。你可能會有一個全球性的try-catch來處理所有的異常。這可能是一個解決方案,如果你沒事的話 – zerkms

回答

0

對不起,關於刪除,意外打中後,它完成。這是貫徹落實錯誤報告單程用時PDO:

try { 
if($dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password)) { 
// Set Errorhandling to Exception instead of PDO error reporting 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} else { 
    throw new Exception(": Connection Error "); 
} 
...later in code block 
$sql = "INSERT INTO lists (ID, Title, Timestamp, Plays, Likes) 
VALUES (:ID, :Title, :Timestamp, :Plays, :Likes)"; 

if($q = $dbh->prepare($sql)) { 
$q->execute(array(':ID'=>$list[$i]["id"], 
      ':Title'=>$list[$i]["title"], 
      ':Timestamp'=>$list[$i]["timestamp"], 
      ':Plays'=>$list[$i]["playcount"], 
      ':Likes'=>$list[$i]["likes"])); 
}else { 
throw new Exception(「: Error on Insert 「); 
} 
//now catch all throw errors 
} catch(Exception $e){ 
$mes = $date.": bdh errors "; 
$mes .= $e->getMessage(); 
//send errors to system error reporting 
error_log($mes); 
} 

看一看PDO Exceptions更多的信息在PDO錯誤的驅動程序

+0

'if($ q = $ dbh-> prepare($ sql))'---這是幹什麼用的? – zerkms

+0

我認爲OP是使用「$ q」而不是「$ stmt = $ bdh-> prepare($ sql)」,這是你通常會看到的。另外,如果準備失敗(缺失post等值),則會拋出錯誤。 – rwhite35

+0

是的,但你爲什麼要檢查它。目標是什麼? – zerkms

相關問題