"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 minha instrução preparada pelo PHP PDO gera um erro "Número de parâmetro inválido"?

Por que minha instrução preparada pelo PHP PDO gera um erro "Número de parâmetro inválido"?

Publicado em 2025-01-18
Navegar:718

Why Does My PHP PDO Prepared Statement Throw an \

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.

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