"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 > Por que estou recebendo o erro "Número de incompatibilidade de variáveis ​​de ligação" nas instruções preparadas do MySQLi?

Por que estou recebendo o erro "Número de incompatibilidade de variáveis ​​de ligação" nas instruções preparadas do MySQLi?

Publicado em 31/10/2024
Navegar:544

Why Am I Getting \

Número de incompatibilidade de variáveis ​​de ligação na inserção de instrução preparada

Ao executar uma instrução INSERT usando instruções preparadas do MySQLi, os usuários podem encontrar o erro: " O número de variáveis ​​de ligação não corresponde ao número de campos na instrução preparada."

Esse problema surge quando o número de variáveis ​​de ligação fornecidas no método bind_param() não se alinha com o número de espaços reservados na consulta INSERT . Por exemplo, considere o trecho de código abaixo:

if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) {

  /* Bind parameters s - string, b - blob, i - int, etc */
  $stmt->bind_param("ss", $user, $pw);

  /* Execute it */
  $stmt->execute();

  /* Bind results */
  $stmt->bind_result($user, $pw);

  /* Close statement */
  $stmt->close();
  $userId = $conn->insert_id;
}

Neste código, a instrução INSERT possui dois espaços reservados (?): um para o usuário e outro para o passe. No entanto, o método bind_param() vincula duas variáveis ​​($user, $pw) aos espaços reservados. Isso resulta no erro de incompatibilidade.

A solução é remover a chamada do método bind_result(), pois a instrução INSERT não retorna nenhum resultado. O código atualizado abaixo insere corretamente os dados na tabela:

if($stmt = $conn->prepare("INSERT INTO login(user, pass) VALUES(?, ?)")) {

  /* Bind parameters s - string, b - blob, i - int, etc */
  $stmt->bind_param("ss", $user, $pw);

  /* Execute it */
  $stmt->execute();

  /* Close statement */
  $stmt->close();
  $userId = $conn->insert_id;
}
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