> 백엔드 개발 > PHP 튜토리얼 > MySQLi의 '명령이 동기화되지 않음' 오류를 수정하는 방법은 무엇입니까?

MySQLi의 '명령이 동기화되지 않음' 오류를 수정하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-08 18:24:12
원래의
549명이 탐색했습니다.

How to Fix MySQLi's

MySQLi의 "명령이 동기화되지 않음" 오류 문제 해결

모든 쿼리를 가져오기 전에 후속 쿼리를 실행할 때 MySQLi "명령이 동기화되지 않음" 오류가 발생함 이전 쿼리의 행입니다. 이 문제를 해결하려면 추가 쿼리를 실행하기 전에 모든 행을 가져와야 합니다.

오류 원인:

MySQL 클라이언트는 행을 가져오지 않은 상태로 유지하는 동안 새 쿼리 실행을 금지합니다. 계속되는 쿼리. 이는 데이터 무결성을 유지하고 여러 결과 집합 간의 충돌을 방지하기 위한 것입니다.

가능한 해결 방법:

1. mysqli_store_result() 또는 mysqli_fetch_all()을 사용하여 행 프리페치

mysqli_store_result() 사용:

$result = mysqli_store_result($db);
로그인 후 복사

사용 mysqli_fetch_all():

$result = mysqli_query($db, $sql)->fetch_all();
로그인 후 복사

2. 저장 프로시저에 mysqli_next_result() 사용

저장 프로시저를 실행하면 여러 결과 집합이 반환될 수 있습니다. 이러한 경우에는 추가 쿼리를 실행하기 전에 mysqli_next_result()를 사용하여 모든 결과 세트를 반복하고 완료합니다.

while ($result = mysqli_next_result($db)) {
    // process the result set
}
로그인 후 복사

3. 계층 구조를 위한 대체 데이터 저장소

쿼리를 단순화하려면 계층 구조 데이터를 다르게 저장하는 것이 좋습니다. 인접 목록 또는 중첩 세트 모델과 같은 다양한 데이터베이스 모델을 탐색하여 데이터 구조를 최적화하고 쿼리 효율성을 향상시킵니다.

추가 참고:

CodeIgnitor 사용자의 경우 다음을 수행할 수 있습니다. mysqli 드라이버의 알려진 문제로 인해 이 오류가 발생합니다. 이 문제를 해결하려면 드라이버의 _execute() 함수를 다음과 같이 수정하세요.

protected function _execute($sql)
{
    $results = $this->conn_id->query($this->_prep_query($sql));
    @mysqli_next_result($this->conn_id); // Fix 'command out of sync' error
    return $results;
}
로그인 후 복사

위 내용은 MySQLi의 '명령이 동기화되지 않음' 오류를 수정하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿