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