"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué mi declaración preparada PHP PDO arroja un error de \"Número de parámetro no válido\"?

¿Por qué mi declaración preparada PHP PDO arroja un error de \"Número de parámetro no válido\"?

Publicado el 2025-01-18
Navegar:616

Why Does My PHP PDO Prepared Statement Throw an \

Error de número de parámetro no válido en PHP PDO

Al intentar ejecutar una declaración preparada usando PDO, puede encontrar el error "SQLSTATE[HY093 ]: Número de parámetro no válido." Este problema surge debido al uso incorrecto de marcadores de parámetros.

La función proporcionada add_persist utiliza la siguiente declaración preparada:

INSERT INTO persist (user_id, hash, expire) VALUES (:user_id, :hash, :expire) ON DUPLICATE KEY UPDATE hash=:hash

Al vincular los valores de los parámetros usando el método ejecutar(), la función usa el siguientes valores:

["user_id" => $user_id, "hash" => $hash, "expire" => $future]

Sin embargo, la declaración preparada contiene un marcador de parámetro duplicado para hash, lo cual no está permitido por PDO. Para resolver este problema, necesitamos asignar un marcador de parámetro único para cada valor que se pasa.

El código corregido sería:

$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)
);

El parámetro adicional :hash2 garantiza que no haya marcadores de parámetros duplicados en la declaración preparada, lo que resuelve el error.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3