현재 위치: > 최신 기사 목록> mysqli :: begin_transaction을 사용할 때 일반적인 연결 오류 문제

mysqli :: begin_transaction을 사용할 때 일반적인 연결 오류 문제

gitbox 2025-06-06

1. 데이터베이스 연결 상태를 확인하십시오

begin_transaction ()을 호출하기 전에 데이터베이스 연결이 성공적으로 설정되었는지 확인해야합니다. 연결이 실패하면 트랜잭션 관련 메소드를 호출하면 오류가 발생합니다. 예를 들어:

<code> $ mysqli = new mysqli ( 'localhost', 'user', 'password', 'database');

if ($ mysqli-> connect_error) {
다이 ( '연결 실패 :'. $ mysqli-> connect_error);
}

$ mysqli-> begin_transaction (); // 연결이 실패하면이 줄은 오류를보고합니다.
</코드>

트랜잭션 방법을 호출하기 전에 연결 감지 로직을 추가하고 후속 문제 해결에 대한 오류 정보를 올바르게 기록하는 것이 좋습니다.

2. 데이터베이스 권한을 확인하십시오

데이터베이스 사용자가 트랜잭션을 활성화 할 수있는 권한이 있는지 확인하십시오. 권한이 제한된 일부 공유 호스트 또는 데이터베이스 계정은 거래 수행에서 제한 될 수 있습니다.

<code> // 예 : 현재 사용자 권한 쿼리 $ result = $ mysqli-> query ( "current_user ()에 대한 show grants"); while ($ row = $ result-> fetch_row ()) {echo $ row [0]. "\N"; } </code>

시작 거래 또는 모든 권한이 보조금 권한에 포함되어 있지 않은 경우 현재 계정 권한이 제한되어 있고 데이터베이스 관리자에게 연락하여 권한을 조정해야 함을 의미합니다.

3. 데이터베이스 엔진이 트랜잭션을 지원하는지 확인하십시오

트랜잭션은 InnoDB 엔진을 사용하여 MySQL 전용 테이블에서 지원됩니다. MyISAM 테이블에서 트랜잭션을 활성화하려고하면 적용되지 않으며 오류가 발생할 수 있습니다.

<code> // 테이블 엔진 점검 엔진 $ result = $ mysqli-> query ( "name = 'your_table'"); $ row = $ result-> fetch_assoc (); Echo '엔진 유형 :'. $ 행 [ '엔진']; </코드>

출력이 MyISAM 인 경우 테이블 구조를 수정하고 엔진을 InnoDB 로 변경해야합니다.

<code> Alter Table Your_table Engine = Innodb; </코드>

4. 거래가 자동으로 제출되지 않도록하십시오

mysqli :: begin_transaction () 의 함수 중 하나는 자동 제출을 끄는 것입니다. 현재 연결이 이미 자동 커밋 모드로 설정된 경우 일부 데이터베이스 구성으로 인해이 동작을 덮어 쓰는 것이 허용되지 않아 트랜잭션이 제대로 열리지 않을 수 있습니다.

<code> // 명시 적으로 Auto-Commit $ mysqli-> autocommit (false);

// 트랜잭션을 시작합니다
$ mysqli-> begin_transaction ();
</코드>

일부 이전 버전의 MySQL 서버 (예 : 5.5 이하)는 특정 구성에서 AutoCommit (False) 호출을 무시할 수 있으며 데이터베이스 버전 및 구성 파일의 관련 매개 변수 ( AutoCommit 과 같은)의 설정을 확인해야합니다.

5. 오류 정보를 캡처하고 분석합니다

오류 메시지를 더 잘 캡처하고 진단하려면 시도해보십시오 ... CatchMySQLI_SQL_EXCEPTion 클래스를 사용하십시오.

<code> mysqli_report (mysqli_report_error | mysqli_report_strict);

노력하다 {
$ mysqli = new mysqli ( 'localhost', 'user', 'password', 'database');
$ mysqli-> begin_transaction ();
// 트랜잭션 작업
$ mysqli-> commit ();
} catch (mysqli_sql_exception $ e) {
Echo '거래 오류 :'. $ e-> getMessage ();
$ mysqli-> rollback ();
}
</코드>

이 방법은 개발자가 연결 시간 초과, 네트워크 오류 또는 SQL 구성 문제와 같은 오류를 신속하게 찾는 데 도움이 될 수 있습니다.

6. 네트워크 및 호스트 구성을 확인하십시오

연결 오류 메시지가 쿼리 중에 MySQL 서버에 연결 하거나 연결이 끊어지면 다음 네트워크 구성을 확인하는 것이 좋습니다.

  • 호스트 이름은 올바른 것입니다 (예 : LocalHost vs 127.0.0.1 사용);

  • 방화벽이 포트 3306 통신을 허용하는지 여부;

  • 데이터베이스 서버가 실행 중인지 여부;

  • 연결 제한이 있는지 여부 (예 : Max_Connections 설정이 너무 낮습니다);

Ping , Telnet 또는 Database 클라이언트 (예 : DBeaver, MySQL Workbench)와 같은 도구를 사용하여 연결을 테스트하면 문제를 신속하게 확인할 수 있습니다.

<code> telnet gitbox.net 3306 </code>

7. 오류 로그를 분석하십시오

마지막으로 위의 메소드가 문제를 찾을 수없는 경우 MySQL 오류 로그와 PHP 오류 로그를 볼 수 있습니다.

  • mysql log path (일반적으로 /var/log/mysql/error.log 또는 구성 파일에 지정 됨);

  • PHP 오류 로그 경로 ( php.inierror_log 구성을 통해 볼 수 있음);

로그의 오류 2002 , 오류 1045 , 오류 2013 과 같은 키워드를 검색하면 문제가 빨리 잠글 수 있습니다.