Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Número de parâmetro inválido, PDO na atualização duplicada falha


Uma menção @CertaiN, com real prepara, não emulados, você não pode vincular a mesma variável várias vezes pelo mesmo nome. Você pode optar por vinculá-lo com outro nome, mas essa consulta não precisa dele. Os VALUES() função retorna o valor que teria sido inserido , o que faria esta consulta:
    $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)';

E pode ser usado para mais colunas, se necessário, assim:
    $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)';