使用PDO获取插入和更新ID

4

我正在尝试使用PDO获取mysql_insert_id。到目前为止,我还没有找到一个能够在插入和更新时都有效的好例子。请问有人可以提供一个完整的代码示例吗?


你知道在执行 SQL UPDATE 语句前后,通过 mysql_insert_id 获取到的值是相同的吗? - Nathaniel Ford
你没有看到这篇文章中的问题吗?你试图在PDO中使用mysql_insert_id。 - Madara's Ghost
1
当使用INSERT... ON DUPLICATE KEY UPDATE时,没有办法获取更新的行的ID,除非再进行一次SELECT语句。 - user1285107
  • NathanielFord ID不是我正在更新的where参数,所以我想要ID回来。
  • Truth 我知道,我用那个词来解释我需要什么。 @SosialLab 谢谢!
- Sander Mangel
3个回答

9

如果你需要获取$pdo->lastInsertId()返回的是刚刚更新过的行的id(如果我需要它,我会认真重新考虑我的设计,但是嘿... 可能真的需要),那么可以按照以下方式进行更新:

 UPDATE tablename  SET some_column='somevalue',id=LAST_INSERT_ID(id);

1
你关于设计部分的想法是完全正确的,但不幸的是,目前我没有看到其他解决方案。 - Sander Mangel
你让我思考了,是的,我真的不需要这个 :P - Patareco

3

谢谢Kristianto,我可以获取到最后插入的行,但无法获取更新后的ID。 你有示例代码吗?也许我做错了什么,我使用的是php.net上的代码。 - Sander Mangel
1
在更新之前如何获取ID?最后更新的行的ID与您用于查找和更新该行的ID相同。最后插入的是AUTO_INCREMENT,但最后更新的ID不是。 - Wahyu Kristianto
1
实际上,我在“WHERE name = 'bla' ORDER BY date DESC LIMIT 1”上执行了更新查询,并希望获得它更新的ID。 - Sander Mangel
添加名为 on_update 的新列。更新后,使用 ORDER BY on_update 进行调用。 - Wahyu Kristianto
你说得对,那可能是最好的解决方案。谢谢! - Sander Mangel

0
<?php 
try { 
    $dbh = new PDO('mysql:host=localhost;dbname=test', 'usrname', 'passwrd'); 

    $stmt = $dbh->prepare("INSERT INTO test (name, email) VALUES(?,?);"); 

    try { 
        $dbh->beginTransaction(); 
        $stmt->execute( array('user', 'user@example.com')); 
        $dbh->commit(); 
        print $dbh->lastInsertId(); 
    } catch(PDOExecption $e) { 
        $dbh->rollback(); 
        print "Error!: " . $e->getMessage() . "</br>"; 
    } 
} catch(PDOExecption $e) { 
    print "Error!: " . $e->getMessage() . "</br>"; 
} 
?>

谢谢你的代码,看起来很有效。只有在更新时它不会返回ID,使用PDO不可能吗? - Sander Mangel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接