クエリがあり、最後に挿入された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()
何が間違っていますか?
それは、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();
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