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; }
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