Una mención de @CertaiN, con real prepara, no emulados, no puede vincular la misma variable varias veces con el mismo nombre. Puede optar por vincularlo con otro nombre, pero esta consulta no lo necesita. Los VALUES()
la función devuelve el valor que se habría insertado
, lo que haría 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)';
Y se puede usar para más columnas si es necesario, así:
$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)';