2012-05-23 106 views
1

我有一個MySQl數據庫,有幾個表,所有的UTF-8和MyISAM存儲。 在PHP中,我正在解析一個將大量數據寫入表的XML文件。我只使用簡單的插入語句和mysqli函數。MySQL自動提交 - 插入被忽略

在表上沒有太多的讀操作,在插入過程中沒有任何一個讀操作。首先,性能非常慢,所以我在腳本的開頭添加了SET AUTOCOMMIT = 0。

我現在的問題是,我所有的插入是在例如第三個foreach循環被忽略,不會出現在mysql表中。在此之前的一切都很好。

所以我的問題是,我做錯了什麼,我該怎麼做?

隨着=一切都自動提交插入,但非常非常慢 自動提交關閉=一切都非常快,但大量的刀片被忽略

希望有人有一個想法,可以幫助。

回答

1

由於INSERT不立即寫入數據庫,因此MySQL更快關閉自動提交功能;只有在執行COMMIT語句時纔會保存數據。插入數據後是否有COMMIT語句?

+0


雖然與mysqli,您可以使用以下代替。非常感謝:)現在正常工作:) – WorldSignia

1

你應該嘗試這樣的:

<?php 
try { 
    $db->beginTransaction(); 

    $stmt = $db->prepare("SOME QUERY?"); 
    $stmt->execute(array($value1)); 

    $stmt = $db->prepare("YET ANOTHER QUERY??"); 
    $stmt->execute(array($value2, $value3)); 

    $db->commit(); 
} catch(PDOException $ex) { 
    //Something went wrong then rollback! 
    $db->rollBack(); 
    echo $ex->getMessage(); 
} 

注:調用bindTransaction()關閉自動自動提交。啊這就是我失蹤了

mysqli_autocommit($dbh, FALSE); // turn off auto-commit 
mysqli_rollback($dbh); // if error, roll back transaction 
mysqli_commit($dbh); // commit transaction