계층 검색 중 MySQLi 명령이 동기화되지 않음
여러 MySQLi를 실행하려고 하면 "명령이 동기화되지 않음" 오류가 발생할 수 있습니다. 특히 계층적 데이터를 검색하는 동안 쿼리가 발생합니다. 이 문서에서는 문제를 자세히 살펴보고 원인을 설명하고 잠재적인 해결 방법을 제공합니다.
근본 원인
MySQL 클라이언트는 행을 가져오지 않은 상태로 유지하는 동안 새 쿼리의 실행을 제한합니다. 진행 중인 쿼리입니다. 이 오류는 새 쿼리를 진행하기 전에 모든 행이 순차적으로 검색되도록 하는 클라이언트의 프로토콜에서 발생합니다.
가능한 해결 방법
이 문제를 해결하려면 몇 가지 옵션을 사용할 수 있습니다. :
1. mysqli_store_result() 사용
이 방법은 외부 쿼리의 모든 행을 클라이언트 버퍼로 미리 가져옵니다. MySQL 서버는 결과의 전체 검색을 승인하므로 후속 쿼리를 자유롭게 실행할 수 있습니다.
2. mysqli_result::fetch_all()
mysqli_store_result()와 유사하게 이 메소드는 전체 결과 세트를 PHP 배열로 검색하여 효율적인 루프 및 데이터 가져오기를 가능하게 합니다.
3. 저장 프로시저에 mysqli_multi_query() 사용
저장 프로시저는 각각 자체 행을 포함하는 여러 결과 세트를 반환할 가능성이 있습니다. mysqli_multi_query()는 이러한 결과 집합을 반복하여 순차적으로 처리하고 MySQL 프로토콜을 준수하는 데 사용해야 합니다.
대체 데이터 저장소
중첩의 단점을 피하려면 계층적 데이터 검색에서 쿼리를 수행하는 경우 보다 간단한 쿼리를 위해 데이터 구조를 조정하는 것이 좋습니다. 인접 목록 또는 중첩 세트와 같은 기술은 계층 구조를 크게 단순화할 수 있습니다.
CodeIgnitor 3.0.3용 사용자 정의 해킹
CodeIgnitor 3.0.3 사용자의 경우 해결 방법에는 라인 수정이 포함됩니다. mysqli_driver.php 파일의 262. _execute() 메소드에 @mysqli_next_result()를 추가하면 'command out ofsync' 오류를 완화할 수 있습니다.
위 내용은 계층적 데이터를 검색할 때 MySQLi에서 '명령이 동기화되지 않음' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!