>데이터 베이스 >MySQL 튜토리얼 >내 MySQLi PHP 코드에서 '명령이 동기화되지 않음' 오류가 발생하는 이유는 무엇입니까?

내 MySQLi PHP 코드에서 '명령이 동기화되지 않음' 오류가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2025-01-23 00:57:12223검색

Why Am I Getting the

PHP MySQL 오류: 명령이 동기화되지 않았습니다

PHP 코드가 mysqli를 사용하여 두 개의 MySQL 쿼리를 실행하려고 시도했지만 "명령이 동기화되지 않았습니다. 지금은 이 명령을 실행할 수 없습니다."라는 오류가 발생했습니다. 이는 기본적으로 버퍼링되지 않은 모드에 있는 mysqli 준비된 명령문 쿼리로 인해 발생합니다.

오류 원인

mysqli는 기본적으로 버퍼링되지 않은 모드에서 쿼리를 실행합니다. 즉, 결과 세트가 메모리에 저장되지 않고 클라이언트로 직접 스트리밍됩니다. 두 개의 쿼리를 사용했으므로 첫 번째 쿼리가 결과 집합을 실행하고 스트리밍합니다. 그러나 첫 번째 쿼리에서 결과를 얻기 전에 두 번째 쿼리를 실행해 봅니다. mysqli에서는 두 번째 쿼리를 실행하기 전에 첫 번째 쿼리의 결과를 가져와야 하기 때문에 "command out of sync" 오류가 발생합니다.

해결책: 버퍼 쿼리

이 문제를 해결하려면 쿼리를 버퍼링해야 합니다. 준비된 명령문 객체의 store_result() 메소드를 사용할 수 있습니다:

<code class="language-php">$numRecords->execute();
$numRecords->store_result();</code>

mysqli는 쿼리를 버퍼링하여 첫 번째 쿼리의 결과 집합을 메모리에 저장하므로 나중에 두 번째 쿼리 실행과 충돌하지 않고 검색할 수 있습니다.

기타 참고사항

코드에서는 foreach 루프 내에서 다양한 쿼리를 실행하려고 합니다.

<code class="language-php">$result = $con->query($recordsQuery);
$rows = array();
while($row = $result->fetch_assoc()) {
    $rows[] = $row;
}</code>

이미 $rows 라는 변수에 쿼리 결과를 저장했기 때문에 이는 실제로 필요하지 않습니다. 루프에서 이 변수를 직접 사용하여 가져온 행에 액세스할 수 있습니다.

이러한 변경 사항을 구현하면 "명령이 동기화되지 않음" 오류 없이 MySQL 쿼리를 실행할 수 있습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.