Erro de número de parâmetro inválido no PHP PDO
Ao tentar executar uma instrução preparada usando PDO, você pode encontrar o erro "SQLSTATE[HY093 ]: Número de parâmetro inválido." Esse problema surge devido ao uso incorreto de marcadores de parâmetro.
A função fornecida add_persist usa a seguinte instrução preparada:
INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash
Ao vincular os valores dos parâmetros usando o método execute(), a função usa os seguintes valores:
["user_id" => $user_id, "hash" => $hash, "expire" => $future]
No entanto, a instrução preparada contém um marcador de parâmetro duplicado para hash, o que não é permitido pelo PDO. Para resolver esse problema, precisamos atribuir um marcador de parâmetro exclusivo para cada valor que está sendo passado.
O código corrigido seria:
$sql = "INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash2"; $stm = $db->prepare($sql); $stm->execute( array("user_id" => $user_id, "hash" => $hash, "expire" => $future, "hash2" => $hash) );
O parâmetro adicional :hash2 garante que não haja marcadores de parâmetro duplicados na instrução preparada, resolvendo o erro.
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