【问题标题】:How to get auto increment id by PDO before execute如何在执行前通过 PDO 获取自动递增 id
【发布时间】: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

标签: php sql


【解决方案1】:

您可以使用 SELECT MAX() 进行 INSERT:

INSERT INTO table1 
(id, column1, column2) 
(SELECT (MAX(id)+1), 'value1', 'value2' FROM table1) 

并用任何你想要的值增加 ID 列。

【讨论】:

    【解决方案2】:
    $insert = $dbh->prepare('INSERT INTO _gegevensgebruiker ((SELECT MAX(id)+1), 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())');
    

    【讨论】:

    • 而不是 id,插入 "(SELECT MAX(id)+1)" 给出你的下一个 id,这是你想要的吗?我不明白。但同样没有多大意义,因为您的 ID 已经是 MAX(id)+1。
    【解决方案3】:

    创建一个 UID。

    $uid = '123#!';
    // $dbh->execute();
    $lastId = $uid;
    

    不要将您的 id 列设置为 autoincr。否则它不起作用。

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-19
      • 2012-10-04
      • 2019-03-23
      • 2016-10-21
      相关资源
      最近更新 更多