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