【发布时间】:2016-06-12 10:21:46
【问题描述】:
我正在寻找关于“如何在执行前通过 PDO 获取自动递增 id”的解决方案,有没有办法在 pdo.xml 中获取未来的 ID。
我尝试了 lastinsertID 但这只能在“执行”之后。
您可以在下面找到原文:
$last_id = $dbh->lastInsertId(); //last insert ID
我的 PDO 查询
$insert = $dbh->prepare('INSERT INTO _gegevensgebruiker (id, company, name, adress, zipcode, city, tel, email, employees, representative, email_re, function, date_end, user, `date_add`) VALUES (NULL, :company, :name, :adress, :zipcode, :city, :tel, :email, :employees, :representative, :email_re, :function, :date_end, :meid, NOW())');
我知道获取 last_id 的方法,但我需要一个解决方案来获取 PDO 语句中的未来 id。
在 PDO 语句之外的我的 instert_ID 解决方案下方:
$lastusers_sql = $dbh->prepare('SELECT MAX(id) FROM users');
$lastusers_sql->execute();
$last_id = $lastusers_sql->fetchColumn();
【问题讨论】:
-
在插入任何东西之前,为什么不从数据库中获取 MAX(your_id_field) 呢? lastisertid 将在创建后为您提供刚刚创建的 id。到那个 MAX(your_id_field),你添加 +1,你得到你的下一个 id,如果有人没有在中间插入 )) 你为什么需要这个功能?
-
如果您阅读我的问题,您会发现我需要 pdo 语句中的未来 ID。所以我不明白你-1,因为每个人都知道执行后lastID的解决方案,但我的问题是关于语句中的未来id。那么你们对未来的 ID 有解决方案吗?
-
我没有给你-1 mate。约书亚刚刚回答了 MAX(id)+1
-
显然futureID必须是MAX(ID)+1,如果是自动增量的。否则,这应通过关注此 ID 的外部脚本在 DB 外部完成。
-
$insert = $dbh->prepare('INSERT INTO _gegevensgebruiker ((SELECT MAX(id)+1), 公司,姓名,地址,邮政编码,城市,电话,电子邮件,员工,代表, email_re, function, date_end, user,
date_add) VALUES (NULL, :company, :name, :adress, :zipcode, :city, :tel, :email, :employees, :representative, :email_re, :function, : date_end, :meid, NOW())');而不是 id,插入“(SELECT MAX(id)+1)”,它会给出你的下一个 id,这是你想要的吗?我不明白。但同样它没有多大意义,因为您的 ID 已经是 MAX(id)+1