"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como resolver o erro “Comandos fora de sincronia” no PHP/MySQLi ao executar várias instruções preparadas?

Como resolver o erro “Comandos fora de sincronia” no PHP/MySQLi ao executar várias instruções preparadas?

Publicado em 2024-11-08
Navegar:785

How to Resolve the \

Erro de comandos fora de sincronia do PHP

Ao executar múltiplas instruções preparadas em PHP/MySQLi, é possível encontrar a mensagem "Comandos fora de sincronização, você não pode executar o comando agora" erro. Isso ocorre quando instruções subsequentes tentam ser executadas enquanto os dados de resultados anteriores permanecem não processados ​​no buffer.

Para corrigir esse problema, é imperativo usar a função mysqli_free_result() para liberar explicitamente os dados de resultados armazenados antes de executar o próximo declaração. Além disso, é crucial chamar a função next_result() no objeto mysqli após a execução de cada instrução para avançar o ponteiro interno para o próximo conjunto de resultados.

Em seu exemplo de código específico, o erro surge durante a execução de $stmt1 porque o resultado de $stmt não foi apagado. Chamando explicitamente mysqli_free_result($stmt) e subsequentemente chamando $mysqli->next_result(), você pode garantir que o buffer seja esvaziado e o ponteiro seja redefinido para a próxima instrução.

Exemplo 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();

Ao implementar essas correções, você eliminará o erro "Comandos fora de sincronia" e garantirá que as instruções preparadas subsequentes possam ser executadas perfeitamente.

Declaração de lançamento Este artigo foi reimpresso em: 1729135816 Se houver alguma violação, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3