MySQL en actualización duplicada con ¿dónde?

Estoy teniendo algunos problemas con la consulta a continuación. Quiero que ejecute la consulta ACTUALIZACIÓN si ya hay una fila para el usuario en la base de datos. Espero que inserte una fila con los valores, o que actualice una fila con los valores tal como se indica en la consulta.

Estoy teniendo el siguiente error:

Error de sintaxis o infracción de acceso: 1064 Se produjo un error en su sintaxis de SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'SET balance = '40', xplevel = '36 'DONDE username =' nibblenews 'AND server =' Factions '' en la línea 1 '

$stmt = $db->prepare('INSERT INTO stats (balance, xplevel, username, server) VALUES (:balance, :xp, :username, :server) ON DUPLICATE KEY UPDATE stats SET balance=:balance2, xplevel=:xp2 WHERE username=:username2 AND server=:server2');
$stmt->bindParam(':balance', $balance, PDO::PARAM_STR);
$stmt->bindParam(':balance2', $balance, PDO::PARAM_STR);
$stmt->bindParam(':xp', $xp, PDO::PARAM_STR);
$stmt->bindParam(':xp2', $xp, PDO::PARAM_STR);
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
$stmt->bindParam(':username2', $username, PDO::PARAM_STR);
$stmt->bindParam(':server', $server, PDO::PARAM_STR);
$stmt->bindParam(':server2', $server, PDO::PARAM_STR);
$stmt->execute();

Respuestas a la pregunta(1)

Su respuesta a la pregunta