2012-05-23 44 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