2012-06-19 60 views
3

我試圖使用PDO獲取mysql_insert_id。 到目前爲止,我還沒有找到一個適用於插入和更新的好例子。 有沒有人有一個完整的代碼作爲例子?使用PDO獲取插入和更新ID

+0

你意識到你從mysql_insert_id獲得的價值是相同的前後SQL'UPDATE',是否正確? –

+0

你沒有看到這篇文章有什麼不對嗎?您正嘗試使用** mysql _ ** insert_id使用** PDO ** –

+1

當使用INSERT ... ON DUPLICATE KEY UPDATE時,沒有辦法獲取沒有額外SELECT語句更新的行的id。 – 2012-06-19 18:07:52

回答

3

PDO::lastInsertId。返回最後插入的行或列值的ID

+0

謝謝Kristianto,我可以找回最後插入的行,我無法取回更新的ID。您是否有一些示例代碼? 我可能做錯了,使用php.net代碼 –

+1

如何在更新之前獲取ID?最後更新行的ID與您用於查找和更新該行的ID相同。上次插入= AUTO_INCREMENT,但最後更新的ID不是。 –

+1

其實我更新查詢「WHERE'name' ='bla'ORDER BY'date' DESC LIMIT 1」,我想獲取它更新的ID。 –

8

如果需要$pdo->lastInsertId()返回剛剛更新了(我會認真考慮我的設計,如果我需要,但哎...可能是一個真正的行的id需要),做這樣的更新:

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

你對設計部分是絕對正確的,在這一點上我不會看到另一個解決方案 –

+0

你讓我思考和是的我並不真的需要這個:P – Patareco

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', '[email protected]')); 
     $dbh->commit(); 
     print $dbh->lastInsertId(); 
    } catch(PDOExecption $e) { 
     $dbh->rollback(); 
     print "Error!: " . $e->getMessage() . "</br>"; 
    } 
} catch(PDOExecption $e) { 
    print "Error!: " . $e->getMessage() . "</br>"; 
} 
?> 
+0

感謝代碼,這似乎工作。只有UPDATE纔會返回一個ID,這對於PDO來說是不可能的嗎? –