Mysql
 sql >> Base de données >  >> RDS >> Mysql

Numéro de paramètre non valide, PDO sur la mise à jour en double échoue

Un @CertaiN mentionne, avec réel prepares, non émulées, vous ne pouvez pas lier la même variable plusieurs fois par le même nom. Vous pouvez choisir de le lier avec un autre nom, mais cette requête n'en a pas besoin. Les VALUES() la fonction renvoie la valeur qui aurait été insérée , ce qui donnerait cette requête :

    $sql = 'INSERT INTO users_meta
         (user_id,meta_key,meta_value)
       VALUES (:user_id,:meta_key,:meta_value)
       ON DUPLICATE KEY
       UPDATE meta_value = VALUES(meta_value)';

Et peut être utilisé pour plus de colonnes si nécessaire, comme ceci :

    $sql = 'INSERT INTO users_meta
         (user_id,meta_key,meta_value)
       VALUES (:user_id,:meta_key,:meta_value)
       ON DUPLICATE KEY
       UPDATE 
         meta_value = VALUES(meta_value),
         meta_key = VALUES(meta_key)';