>  기사  >  데이터 베이스  >  MySQLi 준비된 문을 사용할 때 PHP \'Commands out of sync\' 오류를 해결하는 방법은 무엇입니까?

MySQLi 준비된 문을 사용할 때 PHP \'Commands out of sync\' 오류를 해결하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-20 14:04:17666검색

How to Resolve the PHP

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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