2014-02-13 66 views
1

我在try/catch塊中有三個sql查詢。 Autocommit已關閉,所有三個查詢都運行無誤,我已驗證(如果有任何查詢失敗,它不應到達提交行,但我已通過xdebug驗證了它,一次只執行一行代碼)。當代碼到達commit()函數調用時,mysqli返回false,但沒有錯誤消息。如果前面的查詢全部正常工作,提交失敗怎麼辦?Mysqli :: commit()返回false,但沒有錯誤信息

這基本上是代碼的外觀:

try{ 
    $mysqli->autocommit(false); 

    $sql1 = "insert into..."; 
    $mysqli->query($sql); // Works! 
    if($mysqli->error) 
    { 
     $mysqli->rollback(); 
     throw new Exception.... 
    } 


    $sql2 = "insert into..."; 
    $mysqli->query($sql); // Works! 
    if($mysqli->error) 
    { 
     $mysqli->rollback(); 
     throw new Exception.... 
    } 


    $mysqli->commit(); // Fail 

} 
+0

受影響的表的存儲類型是innoDB,對不對? – raina77ow

+1

'$ mysqli-> autocommit(false)'成功了嗎?嘗試提交後,什麼是'$ mysqli-> error'? – Oswald

+1

表是innoDB,是的。 autocommit的作品。 $ mysqli-error是空的,沒有錯誤信息,沒有錯誤代碼,什麼都沒有。 – user3305609

回答

0

檢查有: $mysqli->begin_transaction(MYSQLI_TRANS_START_READ_WRITE);(當然,如果你想要寫在表格/插入)

嘗試調試以下步驟: [ - 啓動事務代碼 - ]

$ Q2 = $ mysqli->查詢($ QUERY2); //內部事務查詢

print'q2:'。$ mysqli-> error;

[ - 提交/回滾條件/代碼--------]

您可能會收到此錯誤: 「不能在只讀事務中執行的語句。」 - > 將開始事務的參數更改爲MYSQLI_TRANS_START_READ_WRITE

還要檢查是否爲要在其上使用事務的表設置innoDB引擎。

您也可以測試事務塊以外的查詢,以確保它們沒有錯誤。

相關問題