> 데이터 베이스 > MySQL 튜토리얼 > MySQLi '명령이 동기화되지 않음' 오류를 해결하는 방법은 무엇입니까?

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

Linda Hamilton
풀어 주다: 2024-12-13 02:34:11
원래의
299명이 탐색했습니다.

How to Resolve the MySQLi

MySQLi의 "명령이 동기화되지 않음" 오류: 포괄적인 설명

MySQLi는 새 명령이 동기화될 때 "명령이 동기화되지 않음" 오류를 발생시킵니다. 이전 쿼리에서 읽지 않은 행이 아직 있는 동안 쿼리를 시도했습니다. query.

오류 이유

MySQL 클라이언트 프로토콜에서는 새 쿼리를 실행하기 전에 쿼리의 모든 결과를 가져와야 합니다. 이렇게 하면 결과 집합 처리의 일관성이 보장되고 데이터 손실이 방지됩니다.

솔루션

mysqli_store_result() 또는 mysqli_result::fetch_all():

다음을 사용하여 외부 쿼리에서 모든 행을 미리 가져옵니다. mysqli_store_result() 또는 mysqli_result::fetch_all()을 사용하여 전체 결과 세트를 배열로 가져옵니다. 이렇게 하면 결과가 클라이언트에 버퍼링되어 여러 쿼리를 실행할 수 있습니다.

저장 프로시저 및 mysqli_multi_query():

저장 프로시저는 여러 결과 집합을 반환할 수 있습니다. 이를 처리하려면 mysqli_multi_query()를 사용하고 모든 결과 세트가 처리될 때까지 mysqli_next_result()를 사용하여 결과를 반복합니다.

코드 조각

다음은 수정된 버전의 질문의 코드, 사용 mysqli_store_result():

$result = mysqli_query($db, $sql) or exit(mysqli_error($db));

if ($result) {
    $result->store_result(); // Buffer the result set
    echo "<table border='1'>
        <tr><th>id</th>
        <th>name</th>
        <th>parent_id</th>
        <th>parent_name</th>
        <th>level</th>
        <th>email</th></tr>";

    while ($row = mysqli_fetch_assoc($result)) {
        $aid = $row["id"];
        $sql2 = "SELECT * FROM members WHERE MEMNO = '$aid'";
        $result2 = mysqli_query($db, $sql2) or exit(mysqli_error($db));

        if ($result = mysqli_fetch_assoc($result2)) {
            $fname = $ newArray['FNAME'];
            $lname = $newArray['LNAME'];
            $mi = $newArray['MI'];
            $address = $newArray['ADDRESS'];
            $city = $newArray['CITY'];
            $state = $newArray['STATE'];
            $zip = $newArray['ZIP'];
            $kdate = $newArray['KDATE'];
            $date = abs(strtotime(date('m/d/Y')) - strtotime(date($kdate))) / (60 * 60 * 24);
        }

        echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>",
        $row["id"],$row["name"],
        $row["parent_id"],$row["parent_name"],
        $row["level"],$row["email"]);
    }

    echo "</table>";
}
mysqli_free_result($result);
mysqli_close($db);
로그인 후 복사

가능한 디자인 개선

관계형 데이터베이스에 계층적 데이터를 저장하면 쿼리가 복잡해질 수 있습니다. 데이터 저장 및 검색을 단순화하려면 중첩 세트 또는 인접 목록과 같은 대체 모델을 사용하는 것이 좋습니다.

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

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