2014-11-24 53 views
0

假設我在mysql中有一個名爲「persons」的表,它有兩列: Name,idNumber。他們都是主要關鍵。 表最初是空的,我執行下面的代碼:PDOExceptions和事務

try { 
    $db->beginTransaction(); 

    $db->query("INSERT INTO persons (Name, idNumber) VALUES ('Alex', 10)"; 
    $db->query("INSERT INTO persons (Name, idNumber) VALUES ('John', 10)"; 
    $db->commit(); 

} catch (PDOException $e) { 
    $db->rollBack(); 
    echo $e->getMessage(); 
} 

Ofcourse這不應該工作,因爲我們插入相同的ID號,10,兩個人。我的問題是,在第二次插入捕捉後MySQL中引發的錯誤是否會產生PDOException?如果不是的話,如果這個事件發生,我該如何停止交易?在php代碼中。

+0

你測試了嗎? – 2014-11-24 14:18:06

+0

爲什麼不運行它並嘗試一下?當然,您必須先啓用PDO中的ENABLE例外。默認情況下,PDO使用ERRMODE_SILENT,不會發出任何錯誤信號。 – 2014-11-24 14:18:11

+0

你需要嘗試一下。這就是說,我使用了準備好的語句並測試了這個:if($ sth-> execute()){}其中$ sth os $ db。你可以測試我想的查詢,如果沒有(false),你可以獲得錯誤 – 2014-11-24 14:19:03

回答

0

我只是在初始$ db inicialization中設置PDO :: ERRMODE_EXCEPTION。

$ db = new PDO(「mysql:host =」.....,array(PDO :: ATTR_ERRMODE => PDO :: ERRMODE_EXCEPTION));