PHP MySQLi \'명령이 동기화되지 않음\' 오류: 어떻게 해결하나요?

Barbara Streisand
풀어 주다: 2024-11-18 10:03:02
원래의
917명이 탐색했습니다.

PHP MySQLi

PHP 명령 동기화 오류: 이해 및 해결

PHP/MySQLi에서 준비된 여러 명령문을 실행할 때 "명령이 동기화되지 않음" 오류가 발생할 수 있습니다. 이는 실행된 명령문 수와 처리 중인 결과 수가 일치하지 않기 때문에 발생합니다. 이 문제를 해결하려면 다음 통찰력과 솔루션을 고려하십시오.

오류 원인

MySQL 클라이언트가 특정 명령문에 대해 예상보다 많은 데이터를 수신하면 "동기화 중단" 오류가 발생합니다. 이는 MYSQLI_USE_RESULT 플래그와 함께 mysqli::query를 사용할 때 발생합니다. 이 플래그는 MySQL이 결과를 완전히 버퍼링하지 않도록 지시하므로 후속 명령이 동기화되지 않게 됩니다.

코드 조각 설명

제공된 코드에서 두 개의 준비된 문을 사용하여 데이터 베이스. 첫 번째 문은 사용자 정보를 검색하고 두 번째 문은 권한을 검색합니다. 그러나 두 번째 문을 실행하는 동안 오류가 발생했습니다.

해결 방법

오류를 해결하려면 두 번째 문을 실행하기 전에 첫 번째 문 결과를 해제해야 합니다. 이는 mysqli_stmt->free_result() 함수를 호출하여 달성됩니다. 또한 각 쿼리 후에 mysqli->next_result()를 호출하면 추가 결과가 처리되었는지 확인할 수 있습니다.

다음은 문제 해결 방법의 예입니다.

    $stmt = $mysqli->prepare("SELECT id, username, password, firstname, lastname, salt FROM members WHERE email = ? LIMIT 1");
    $stmt->bind_param('s', $loweredEmail);
    $stmt->execute();
    $stmt->store_result();
    $stmt->bind_result($user_id, $username, $db_password, $firstname, $lastname, $salt);
    $stmt->fetch();

    $stmt->free_result();
    $mysqli->next_result(); // Ensure no stray results are present

    $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();
로그인 후 복사

추가 팁

  • 각 준비된 문에 대해 별도의 개체를 사용하여 다음을 방지하세요. 혼란.
  • mysqli_stmt->error를 사용하여 명령문을 실행한 후에는 항상 오류를 확인하십시오.
  • 필요한 경우가 아니면 MYSQLI_USE_RESULT를 사용하지 마십시오. 동기화 문제가 발생할 수 있습니다.

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

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