Probeer:
$sql = "INSERT INTO persist (user_id, hash, expire)
VALUES (:user_id, :hash, :expire)
ON DUPLICATE KEY UPDATE hash=:hash2";
en
$stm->execute(
array(":user_id" => $user_id,
":hash" => $hash,
":expire" => $future,
":hash2" => $hash)
);
Uittreksel uit de documentatie (http://php.net/manual/en/pdo. prepare.php ):
U moet een unieke parametermarkering opnemen voor elke waarde die u aan de instructie wilt doorgeven wanneer u PDOStatement::execute() aanroept. U kunt een benoemde parametermarkering met dezelfde naam niet twee keer gebruiken in een voorbereide instructie. U kunt niet meerdere waarden binden aan een enkele benoemde parameter in bijvoorbeeld de IN()-clausule van een SQL-instructie.