PDO获取插入的最后一个ID

Wil*_*aan 144 php mysql database pdo

我有一个查询,我想要插入最后一个ID.字段ID是主键并自动递增.

我知道我必须使用这个声明:

LAST_INSERT_ID()
Run Code Online (Sandbox Code Playgroud)

该语句适用于这样的查询:

$query = "INSERT INTO `cell-place` (ID) VALUES (LAST_INSERT_ID())";
Run Code Online (Sandbox Code Playgroud)

但是,如果我想使用此声明获取ID:

$ID = LAST_INSERT_ID();
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Fatal error: Call to undefined function LAST_INSERT_ID()
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Cor*_*bin 328

那是因为这是一个SQL函数,而不是PHP.你可以用PDO::lastInsertId().

喜欢:

$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();
Run Code Online (Sandbox Code Playgroud)

如果你想用SQL代替PDO API,你可以像普通的选择查询一样:

$stmt = $db->query("SELECT LAST_INSERT_ID()");
$lastId = $stmt->fetchColumn();
Run Code Online (Sandbox Code Playgroud)

  • @ArtGeigel它将是PDO实例底层连接的最后插入ID.换句话说,它在您描述的场景中是安全的,因为并发查询将在单独的连接中进行. (33认同)
  • 所以也许这是一个愚蠢的后续问题,但我只想确定.当我依赖于lastInsertId()时它会返回当前正在执行的代码中发生的最后一个插入的ID吗?或者它是否从我的数据库中返回最后插入的ID?例如,如果我有一个流量很大的网站,我在登录脚本中插入一些内容并使用lastInsertId()来获取插入的iD,但是很多人同时登录,我依赖于lastInsertId是否安全( )从该特定代码实例中获取最后插入的ID?或者我冒风险 (25认同)
  • @ rybo111,首先是"尖叫蛇案".第二,它是MySQL的命名约定,而不是PHP (6认同)
  • @rybo111,嗯`SELECT LAST_INSERT_ID()` 是一个 MySQL 函数 (2认同)

小智 12

lastInsertId()仅在INSERT查询后起作用.

正确:

$stmt = $this->conn->prepare("INSERT INTO users(userName,userEmail,userPass) 
                              VALUES(?,?,?);");
$sonuc = $stmt->execute([$username,$email,$pass]);
$LAST_ID = $this->conn->lastInsertId();
Run Code Online (Sandbox Code Playgroud)

不正确:

$stmt = $this->conn->prepare("SELECT * FROM users");
$sonuc = $stmt->execute();
$LAST_ID = $this->conn->lastInsertId(); //always return string(1)=0
Run Code Online (Sandbox Code Playgroud)