> 백엔드 개발 > PHP 튜토리얼 > PHP의 MySQL 준비 명령문에서 '명령이 동기화되지 않음' 오류가 발생하는 이유는 무엇입니까?

PHP의 MySQL 준비 명령문에서 '명령이 동기화되지 않음' 오류가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-23 07:57:48
원래의
155명이 탐색했습니다.

Why Am I Getting a

명령이 동기화되지 않음, MySQL 준비 문 문제

두 개의 MySQL을 실행하려고 시도하는 동안 "명령이 동기화되지 않음" 오류가 발생했습니다. mysqli와 PHP를 사용한 쿼리. 이 오류는 버퍼링되지 않은 쿼리가 여러 개 진행 중이고 명령이 올바른 순서로 실행되지 않을 때 발생합니다.

코드에서 $countQuery 및 $recordsQuery라는 두 개의 쿼리를 준비했습니다. 그러나 기본적으로 mysqli는 준비된 문에 대해 버퍼링되지 않은 쿼리를 사용합니다. 이는 다음 쿼리를 실행하기 전에 각 쿼리에 대한 결과를 가져와야 함을 의미합니다.

오류 원인

코드가 $ 루프 내에서 $recordsQuery를 실행하려고 시도합니다. countQuery. $countQuery의 결과를 가져오지 않기 때문에 mysqli는 이를 버퍼링되지 않은 쿼리로 처리하고 $recordsQuery를 순서 없이 실행하게 됩니다. 이로 인해 "명령이 동기화되지 않음" 오류가 발생합니다.

해결 방법

이 문제를 해결하려면 다음 두 가지 옵션이 있습니다.

  • 첫 번째 쿼리 결과 가져오기: 다음을 사용하여 $countQuery의 결과를 배열로 가져옵니다. $numRecords->get_result(). 이렇게 하면 결과가 버퍼링되고 나중에 $recordsQuery를 실행할 수 있습니다.
  • mysqli store_result() 사용: 또는 결과를 가져오기 전에 $stmt->store_result() 메서드를 사용할 수도 있습니다. . 이렇게 하면 추가 배열이 필요 없이 결과가 내부적으로 버퍼링됩니다.

store_result()의 예

if ($numRecords = $con->prepare($countQuery)) {
    $numRecords->bind_param("s", $brand);
    $numRecords->execute();
    $numRecords->store_result(); // Buffer the query results
    $data = $con->query($countQuery) or die(print_r($con->error));
    $rowcount = $data->num_rows;
    // Continue with your code...
로그인 후 복사

참고:

$countQuery를 사용하여 $recordsQuery 이전의 행 수를 계산하는 경우 $recordsQuery를 실행하기 전에 $numRecords->free_result()를 사용한 $countQuery의 결과입니다. store_result를 사용하는 경우에는 필요하지 않습니다.

위 내용은 PHP의 MySQL 준비 명령문에서 '명령이 동기화되지 않음' 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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