Как я могу использовать ON DUPLICATE KEY UPDATE в PDO с mysql?

DETAILS

Я делаю одну вставку для истечения срока действия новой или продленной лицензии. Срок истечения составляет 2 года с даты вставки. Если дубликат обнаружен, запись будет обновлена так, чтоthe expiry equals the remaining expiry plus 2 years.

Что касается дубликатов, в приведенном ниже примере должна быть только одна строка, содержащая user_id = 55 и license = commercial.

TABLE: licence_expiry

--------------------------------------------------------
|   user_id   |   licence   |           expiry         |  
--------------------------------------------------------
|     55      |  commercial |     2013-07-04 05:13:48  |  
---------------------------------------------------------

user_id (int11), лицензия (varchan50), срок действия (DATETIME)

Я думаю, что в MySQL вы могли бы написать что-то вроде этого (обратите внимание, что я не проверял, работает ли код в 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

QUESTION: Как я могу сделать это с PDO? Я написал грубую схему того, что, по моему мнению, буду использовать, но я не уверен, что написать для значения срока действия дляON 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();        
    }

Буду признателен за любую оказанную помощь.

Ответы на вопрос(2)

Ваш ответ на вопрос