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 중국어 웹사이트의 기타 관련 기사를 참조하세요!