>  기사  >  데이터 베이스  >  PHP MySQLi \'명령이 동기화되지 않음\': 오류를 수정하는 방법?

PHP MySQLi \'명령이 동기화되지 않음\': 오류를 수정하는 방법?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-22 10:38:12491검색

PHP MySQLi

PHP 명령이 동기화되지 않음: 딜레마 해결

PHP 및 MySQLi를 사용하여 MySQL 데이터베이스에서 데이터를 검색할 때 준비된 여러 실행 명령문은 때때로 "명령이 동기화되지 않아 명령을 실행할 수 없습니다"라는 오류로 이어질 수 있습니다. now."

원인 및 해결 방법

이 오류는 연결 개체($mysqli)에 이전 쿼리의 보류 결과가 있을 때 발생합니다. 이 문제를 해결하려면 준비된 각 명령문 다음에 $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();
$stmt->close();

while ($mysqli->more_results()) {
    $mysqli->next_result();
}

$stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1");
$stmt1->bind_param('s', $user_id);
// This is where the error occurs
$stmt1->execute();

이 코드에서 오류는 다음과 같습니다. 두 번째 문($stmt1)을 실행할 때 발생합니다. 이 문제를 해결하려면 $stmt1을 실행하기 전에 다음 줄을 추가하세요.

$mysqli->next_result();

추가 팁

  • 항상 free_result()를 호출하고( )를 각 쿼리 실행 후 $stmt 개체에 적용하세요.
  • 각 쿼리마다 별도의 $stmt 개체를 사용하세요. 가능한 경우 준비된 명령문을 사용하세요.
  • 위 해결 방법을 시도한 후에도 오류가 발생하면 mysqli::more_results() 및 mysqli::next_result()를 사용하여 버퍼에 남아 있는 보류 중인 결과를 확인하는 것이 좋습니다.

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

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