2012-05-21 73 views
104

我有一個查詢,我想要插入最後一個ID。字段ID是主鍵和自動遞增。PDO獲取插入的最後一個ID

我知道,我必須用這個語句:

LAST_INSERT_ID() 

這種說法可與這樣的查詢:

$query = "INSERT INTO `cell-place` (ID) VALUES (LAST_INSERT_ID())"; 

但是,如果我想用這個說法來獲取ID:

$ID = LAST_INSERT_ID(); 

我得到這個錯誤:

Fatal error: Call to undefined function LAST_INSERT_ID() 

我在做什麼錯?

回答

220

這是因爲這是一個SQL函數,而不是PHP。您可以使用PDO::lastInsertId()

像:

$stmt = $db->prepare("..."); 
$stmt->execute(); 
$id = $db->lastInsertId(); 

如果你想用SQL代替PDO API來做到這一點,你會做它像一個正常的選擇查詢:

$stmt = $db->query("SELECT LAST_INSERT_ID()"); 
$lastId = $stmt->fetchColumn(); 
+0

是你的權利,我發現它和它的作品,謝謝你,我會接受的答案 –

+2

@IllyasMimouni能否請您解釋一下編輯如何提供更高的安全性?在交易中包裝單個陳述不會提供任何內容。 – Corbin

+0

@Corbin:我刪除了部分,你說得對。 – Mimouni

4

lastInsertId()後才能正常工作INSERT查詢。

正確:

$stmt = $this->conn->prepare("INSERT INTO users(userName,userEmail,userPass) 
           VALUES($username,$email,$pass)"); 
$sonuc = $stmt->execute(); 
$LAST_ID = $this->conn->lastInsertId(); 

錯誤:

$stmt = $this->conn->prepare("SELECT * FROM users"); 
$sonuc = $stmt->execute(); 
$LAST_ID = $this->conn->lastInsertId(); //always return string(1)=0 
+8

糟糕的例子是,變量在查詢中沒有位置。使用準備好的語句:http://php.net/manual/en/pdo.prepared-statements.php –