Error de comandos PHP no sincronizados
Al ejecutar varias declaraciones preparadas en PHP/MySQLi, es posible encontrar el mensaje "Comandos fuera de sincronización". sincronización, no puedes ejecutar el comando ahora". Esto ocurre cuando las declaraciones posteriores intentan ejecutarse mientras los datos del resultado anterior permanecen sin procesar en el búfer.
Para rectificar este problema, es imperativo utilizar la función mysqli_free_result() para liberar explícitamente los datos del resultado almacenado antes de ejecutar la siguiente declaración. Además, es crucial llamar a la función next_result() en el objeto mysqli después de la ejecución de cada declaración para avanzar el puntero interno al siguiente conjunto de resultados.
En su ejemplo de código específico, el error surge durante la ejecución de $stmt1 porque el resultado de $stmt no se borra. Al llamar explícitamente a mysqli_free_result($stmt) y posteriormente llamar a $mysqli->next_result(), puede asegurarse de que el búfer se vacíe y el puntero se restablezca para la siguiente declaración.
Ejemplo de código modificado:
$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();
Al implementar estas correcciones, eliminará el error "Comandos no sincronizados" y garantizará que las declaraciones preparadas posteriores se puedan ejecutar sin problemas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3