PHP/MySQLi에서 준비된 여러 명령문을 실행할 때 "명령이 동기화되지 않음" 오류가 발생할 수 있습니다. 이는 실행된 명령문 수와 처리 중인 결과 수가 일치하지 않기 때문에 발생합니다. 이 문제를 해결하려면 다음 통찰력과 솔루션을 고려하십시오.
MySQL 클라이언트가 특정 명령문에 대해 예상보다 많은 데이터를 수신하면 "동기화 중단" 오류가 발생합니다. 이는 MYSQLI_USE_RESULT 플래그와 함께 mysqli::query를 사용할 때 발생합니다. 이 플래그는 MySQL이 결과를 완전히 버퍼링하지 않도록 지시하므로 후속 명령이 동기화되지 않게 됩니다.
제공된 코드에서 두 개의 준비된 문을 사용하여 데이터 베이스. 첫 번째 문은 사용자 정보를 검색하고 두 번째 문은 권한을 검색합니다. 그러나 두 번째 문을 실행하는 동안 오류가 발생했습니다.
오류를 해결하려면 두 번째 문을 실행하기 전에 첫 번째 문 결과를 해제해야 합니다. 이는 mysqli_stmt->free_result() 함수를 호출하여 달성됩니다. 또한 각 쿼리 후에 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(); $mysqli->next_result(); // Ensure no stray results are present $stmt1 = $mysqli->prepare("SELECT privileges FROM delegations WHERE id = ? LIMIT 1"); $stmt1->bind_param('s', $user_id); $stmt1->execute(); $stmt1->store_result(); $stmt1->bind_result($privileges); $stmt1->fetch();
위 내용은 PHP MySQLi \'명령이 동기화되지 않음\' 오류: 어떻게 해결하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!