Como posso usar ON DUPLICATE KEY UPDATE no PDO com o mysql?
DETALHES
Eu estou fazendo uma única inserção para o termo de uma licença nova ou renovada. O período de tempo para o vencimento é de 2 anos a contar da data de inserção. Se uma duplicata for detectada, a entrada será atualizada de tal forma queo vencimento é igual ao prazo remanescente mais 2 anos.
Em relação a duplicatas, no exemplo abaixo, deve haver apenas uma linha contendo user_id = 55 e license = commercial.
MESA: licence_expiry
--------------------------------------------------------
| user_id | licence | expiry |
--------------------------------------------------------
| 55 | commercial | 2013-07-04 05:13:48 |
---------------------------------------------------------
user_id (int11), licença (varchan50), expiração (DATETIME)
Eu acho que no mysql você escreveria algo assim (Por favor note que eu não verifiquei se o código funciona no mysql).
INSERT INTO `licence_expiry`
(`user_id`, `licence`, `expiry`)
VALUES
(55, commercial, NOW()+ INTERVAL 2 YEAR)
ON DUPLICATE KEY UPDATE
`expiry` = `expiry` + INTERVAL 2 YEAR
QUESTÃO: Como posso fazer isso com o PDO? Eu escrevi um esboço do que eu acho que vou usar, mas não tenho certeza do que escrever para o valor de expiração para oON DUPLICATE KEY UPDATE.
$sql = "INSERT INTO $table (user_id, licence, expiry)
VALUES (
:user_id,
:licence,
:expiry)
ON DUPLICATE KEY UPDATE expiry = Something";
try {
$dbh = new PDO('login info here');
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':user_id', $userID, PDO::PARAM_INT);
$stmt->bindParam(':licence',$licence, PDO::PARAM_STR);
$stmt->bindParam(':expiry',$expiry, PDO::PARAM_STR);
$stmt->execute();
//$stmt->closeCursor(); //use this instead of $dbh = null if you will continue with another DB function
$dbh = null;
}
catch(PDOException $e)
{
$error=$e->getMessage();
}
Qualquer ajuda é muito apreciada.