2014-09-29 90 views
1

我有以下代码:我可以通过单个请求获得INSERT/UPDATE ID吗?

$put_tag_rq = $DBH->prepare(" 
    INSERT INTO `tags` 
    SET 
    `name` = :name 
    ON DUPLICATE KEY UPDATE 
    `id` = `id` 
"); 
$put_tag_rq->execute(array(
    'name' => $tag, 
)); 
$tag_id = $DBH->lastInsertId(); 
echo "***********Last insert ID = $tag_id<br>"; 

请注意name也是该标签的关键。

如果插入name标签尚未出现在表格中,此代码正常工作。但是如果name已经存在,则lastInsertId()返回0。

当然,我可以做两个请求:首先检查name标签是否已经出现在标签中(并获得其ID),第二个插入name已经出现在选项卡中。

但我认为它应该更简单。不是吗?

+1

什么是你想更新:关于如何做到这一点在PHP http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

而且更多信息?您已将'id'设置为其现有值,因此MySQL根本不会修改该行。 'affectedRows()'的值将会不同,如果新插入的值为1,如果修改了现有的行,则为2,如果没有更改,则为0。 – 2014-09-29 20:55:26

+1

还是你想返回更新行的id__? – 2014-09-29 20:56:02

+0

@MichaelBerkowski我已经更新了'name'也是关键的问题,所以如果'name'已经存在 - UPDATE语句应该可以工作。 – user2525317 2014-09-29 21:03:02

回答

相关问题