2013-02-08 4 views
2

PHP에서 mysql 확장을 사용하고 있습니다. PHP 5.5.0부터는 더 이상 사용되지 않습니다.하지만이 확장을 사용하여 작성한 많은 코드가 있습니다. mysql_query가 쿼리를 커밋하는 것처럼 보입니다. 그렇다면 자동 커밋으로 설정된다는 의미입니다. 설치 방법은 자동 커밋되지 않습니다.mysql_query가 모든 것을 커밋합니까?

+0

MySQLi를 사용하고 있다면 MySQLi :: autocommit을 할 수 있습니다. PDO를 사용한다면 PDO :: beginTransaction을 할 수 있습니다. 아무도 mysql_ *을 유지하는 것을 돕고 싶지 않습니다. –

+1

mysql_ * 메소드를 사용하는 것이 가능하지 않다고 생각하면 최소한 mysqli로 업그레이드해야합니다. 이것은 mysql과 유사한 절차 스타일 연산을하기 때문에 최소한의 노력으로이 작업을 수행 할 수 있습니다. –

+0

그래, 내가 추가 할 수있는 것을 볼 수있다. 그래서 mysqli를 사용할 것이다. –

답변

5

이전 mysql 확장에는 트랜잭션 제어를위한 기능이 특별히 없지만 SQL 문을 사용하여 원하는 작업을 수행 할 수 있습니다.

당신은 암시 적으로 간단하게 트랜잭션을 시작하여 하나의 트랜잭션 (transaction)의 기간에 대해 자동 커밋을 해제 할 수 있습니다

mysql_query("START TRANSACTION"); 

을하는 즉시 COMMIT 또는 ROLLBACK으로, 자동 커밋 모드는 기본으로 돌아갑니다.

mysql_query("SET GLOBAL autocommit=0"); 
: 그것은 모든 세션에 대한 기본을 변경 있도록

mysql_query("SET autocommit=0"); 

또는 MySQL의 인스턴스에 전 세계적으로 변경 :

mysql_query("COMMIT"); // or ROLLBACK 

당신은 세션 변수를 설정하여 전체 세션에 대해 자동 커밋을 해제 할 수 있습니다

/etc/my.cnf를 편집하여 MySQL 서비스 시작시 전역 설정을 변경하도록 설정하십시오.

당신이 MySQL을 5.1을 사용하는 경우 0
[mysqld] 
autocommit=0 

, 당신은 약간 다르게이 작업을 수행해야한다 :

[mysqld] 
init_connect='SET autocommit=0' 

당신은 아마 이미 알고 있지만, 그것은 당신이 InnoDB의 테이블을 사용하는 경우 거래는 아무 의미가 있음을 반복 맺는다. MyISAM 테이블은 트랜잭션을 지원하지 않으므로 설정에 관계없이 항상 자동 커밋됩니다. MEMORY 및 CSV를 비롯한 여러 다른 스토리지 엔진과 동일합니다.

관련 문제