PHP 명령 동기화 오류
PHP/MySQLi에서 준비된 여러 명령문을 실행할 때 "명령이 동기화되지 않음"이 발생할 수 있습니다. 동기화, 지금은 명령을 실행할 수 없습니다" 오류가 발생했습니다. 이는 이전 결과 데이터가 버퍼에 처리되지 않은 상태로 남아 있는 동안 후속 명령문을 실행하려고 할 때 발생합니다.
이 문제를 해결하려면 다음 명령을 실행하기 전에 mysqli_free_result() 함수를 사용하여 저장된 결과 데이터를 명시적으로 해제해야 합니다. 성명. 또한 각 명령문 실행 후 mysqli 객체에서 next_result() 함수를 호출하여 내부 포인터를 다음 결과 세트로 이동시키는 것이 중요합니다.
특정 코드 예제에서는 실행 중에 오류가 발생합니다. $stmt1의 결과가 지워지지 않았기 때문입니다. mysqli_free_result($stmt)를 명시적으로 호출하고 이어서 $mysqli->next_result()를 호출하면 버퍼가 비워지고 다음 명령문에 대한 포인터가 재설정되는 것을 확인할 수 있습니다.
수정된 코드 예:
$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);
$stmt1->execute();
$stmt1->store_result();
$stmt1->bind_result($privileges);
$stmt1->fetch();
$stmt1->free_result();
$stmt1->close();
이러한 수정 사항을 구현하면 "명령이 동기화되지 않음" 오류가 제거되고 준비된 후속 명령문이 원활하게 실행될 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3