2012-05-23 2 views
1

몇 개의 테이블, 모든 UTF-8 및 MyISAM 스토리지가있는 MySQl 데이터베이스가 있습니다. PHP에서는 테이블에 많은 데이터를 쓰는 XML 파일을 구문 분석하고 있습니다. 나는 단순한 Insert 문과 mysqli 함수를 사용하고있다.MySQL 자동 커밋 - 삽입이 무시됩니다.

테이블에 너무 많은 읽기 작업이 없으며 삽입 중에는 아무도 작업을 수행하지 않습니다. 먼저 성능이 매우 느려서 스크립트 시작 부분에 SET AUTOCOMMIT = 0을 추가했습니다.

내가 지금 가지고있는 문제는 예를 들어 세 번째 foreach 루프는 무시되고 mysql 테이블에 나타나지 않습니다. 그 전의 모든 것이 좋습니다.

제 질문은 무엇이 잘못 되었습니까? 어떻게해야합니까? = 모두에 자동 커밋으로

를 삽입하지만, 자동 커밋 해제 = 모든 것을 아주 아주 느린되어 매우 빠르고하지만, 삽입의 많은

이 희망 누군가가 아이디어를 가지고 도움이 무시됩니다.

답변

1

INSERT가 데이터베이스에 즉시 기록되지 않기 때문에 자동 커밋이 해제되어 MySQL이 더 빠릅니다. COMMIT.을 실행할 때만 데이터가 저장됩니다. 데이터를 삽입 한 후 COMMIT 문을 사용합니까?

+0

을 그게 내가 없어진거야 아. 고마워요 :) 지금 잘 작동합니다 :) – 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에 있지만, 대신를 사용할 수 있습니다 :

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