web-dev-qa-db-ja.com

PDOは最後に挿入されたIDを取得します

クエリがあり、最後に挿入されたIDを取得したい。フィールド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()

何が間違っていますか?

138
William Kinaan

それは、PHPではなくSQL関数だからです。 PDO::lastInsertId() を使用できます。

のような:

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

PDO APIの代わりにSQLを使用する場合は、通常の選択クエリのように実行します。

$stmt = $db->query("SELECT LAST_INSERT_ID()");
$lastId = $stmt->fetchColumn();
301
Corbin

lastInsertId()は、INSERTクエリの後にのみ機能します。

正しい:

$stmt = $this->conn->prepare("INSERT INTO users(userName,userEmail,userPass) 
                              VALUES(?,?,?);");
$sonuc = $stmt->execute([$username,$email,$pass]);
$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
6