"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 여러 개의 준비된 문을 실행할 때 PHP/MySQLi에서 \"명령이 동기화되지 않음\" 오류를 해결하는 방법은 무엇입니까?

여러 개의 준비된 문을 실행할 때 PHP/MySQLi에서 \"명령이 동기화되지 않음\" 오류를 해결하는 방법은 무엇입니까?

2024-11-08에 게시됨
검색:783

How to Resolve the \

PHP 명령 동기화 오류

PHP/MySQLi에서 준비된 여러 명령문을 실행할 때 "명령이 동기화되지 않음"이 발생할 수 있습니다. 동기화, 지금은 명령을 실행할 수 없습니다" 오류가 발생했습니다. 이는 이전 결과 데이터가 버퍼에 처리되지 않은 상태로 남아 있는 동안 후속 명령문을 실행하려고 할 때 발생합니다.

이 문제를 해결하려면 다음 명령을 실행하기 전에 mysqli_free_result() 함수를 사용하여 저장된 결과 데이터를 명시적으로 해제해야 합니다. 성명. 또한 각 명령문 실행 후 mysqli 객체에서 next_result() 함수를 호출하여 내부 포인터를 다음 결과 세트로 이동시키는 것이 중요합니다.

특정 코드 예제에서는 실행 중에 오류가 발생합니다. $stmt1의 결과가 지워지지 않았기 때문입니다. mysqli_free_result($stmt)를 명시적으로 호출하고 이어서 $mysqli->next_result()를 호출하면 버퍼가 비워지고 다음 명령문에 대한 포인터가 재설정되는 것을 확인할 수 있습니다.

수정된 코드 예:

    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt);
    $stmt->fetch();

    $stmt->free_result();
    $stmt->close();

    while ($mysqli->more_results()) {
        $mysqli->next_result();
    }

    $stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
    $stmt1->bind_param('s', $user_id);
    $stmt1->execute();
    $stmt1->store_result();
    $stmt1->bind_result($privileges);
    $stmt1->fetch();

    $stmt1->free_result();
    $stmt1->close();

이러한 수정 사항을 구현하면 "명령이 동기화되지 않음" 오류가 제거되고 준비된 후속 명령문이 원활하게 실행될 수 있습니다.

릴리스 선언문 이 글은 1729135816에서 재인쇄되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3