182

クエリがあり、最後に挿入された 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()

私は何を間違っていますか?

4

3 に答える 3

418

これは、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();
于 2012-05-21T07:20:34.797 に答える
20

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
于 2017-01-13T13:26:33.870 に答える