집 >데이터 베이스 >MySQL 튜토리얼 >MySQLi 준비된 문을 사용할 때 PHP \'Commands out of sync\' 오류를 해결하는 방법은 무엇입니까?
PHP 명령 동기화 오류: 원인 및 해결 방법
PHP 및 MySQLi로 작업하여 준비된 명령문을 사용하여 데이터베이스에서 데이터를 검색할 때, "명령이 동기화되지 않았습니다. 지금 명령을 실행할 수 없습니다." 오류가 발생할 수 있습니다. 이 문제는 일반적으로 동일한 PHP 스크립트 내에서 여러 개의 준비된 문을 실행하려고 할 때 발생합니다.
이 오류는 MySQLi의 query() 메서드가 MYSQLI_USE_RESULT 옵션과 함께 사용될 때 후속 호출이 "오래된" 상태로 남아 있기 때문에 발생합니다. 이 문제를 해결하려면 다음으로 진행하기 전에 첫 번째 문의 결과 처리를 올바르게 완료하는 것이 중요합니다.
한 가지 해결 방법은 각 결과 세트가 검색된 후 mysqli_free_result()를 호출하는 것입니다. 이 함수는 버퍼에서 보류 중인 결과를 해제하여 후속 명령문이 성공적으로 실행되도록 합니다.
또 다른 효과적인 접근 방식은 mysqli::next_result()를 사용하는 것입니다. 준비된 각 명령문을 실행한 후 next_result()를 호출하여 MySQLi 내에서 내부 포인터를 전진시켜 다음 명령문에 대한 적절한 동기화를 보장합니다. 이는 저장 프로시저나 여러 결과 세트로 작업할 때 특히 중요합니다.
다음은 next_result() 사용을 보여주는 예입니다.
<?php $mysqli = new mysqli('localhost', 'user', 'password', 'database'); // Prepare and execute first statement $stmt1 = $mysqli->prepare("SELECT * FROM users WHERE username = ?"); $stmt1->bind_param('s', $username); $stmt1->execute(); $stmt1->store_result(); // Free the result set and advance to the next result $stmt1->free_result(); $mysqli->next_result(); // Prepare and execute second statement $stmt2 = $mysqli->prepare("SELECT * FROM orders WHERE user_id = ?"); $stmt2->bind_param('i', $userId); $stmt2->execute(); $stmt2->store_result(); // Bind results and fetch data $stmt2->bind_result($orderId, $productId, $quantity); while ($stmt2->fetch()) { // Do something with the fetched data } $stmt2->free_result(); $mysqli->close(); ?>
이러한 전략을 구현하면 " 명령이 동기화되지 않음" 오류가 발생하여 PHP 스크립트에서 준비된 여러 명령문이 원활하게 실행되도록 합니다.
위 내용은 MySQLi 준비된 문을 사용할 때 PHP \'Commands out of sync\' 오류를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!