【问题标题】:Insert data into table and immediately select ID number of the row将数据插入表格并立即选择行的ID号
【发布时间】:2016-07-30 09:04:29
【问题描述】:

我有一个名为“Buyers”的 MYSQL 表。我正在获取表单数据并将其插入到名为 insert.php 的页面上的表格中。

现在,除了表单字段的列名,我在表中有一个自动递增 ID 列。我想要的是;一旦我将表单数据发送到表中,我想执行一些 SQL 来获取我刚刚插入数据的行的 ID 号。

例如,我有 SQL:

INSERT INTO Buyers (name, email, job) VALUES ('$_POST[name]', '$_POST[email]', '$_POST[job]');

这将在“买家”表中创建一行,其中包含来自表单字段“姓名”、“电子邮件”和“工作”的数据。

此行将有一个自动增量生成的 ID 号。

那么,我怎样才能选择那个准确的 ID 号呢?有什么方法可以选择表中最近的行,因为那是包含我想要的 ID 号的行?

【问题讨论】:

  • 您使用的是什么mysqli_*PDO?因为两者都具有像 last_inserted_id 这样的内置函数,可以在插入后获取最新的 id。其他明智的SELECT id from buyers ORDER BY id DESC LIMIT 1
  • 我试试 ORDER BY DESC 方法,看看能不能用。。。
  • 谢谢你,它工作得很好!
  • @J.Brooker 谁的解决方案适合你?
  • @VamsiAbbineni 谢谢。当您发布答案和 cmets 时,请保持这种屈膝礼。我希望你明白我想说的话。谢谢

标签: php mysql sql


【解决方案1】:

Mysqlimysqli_insert_id()

<?php
mysqli_query($con,"INSERT INTO Buyers (name, email, job) VALUES ('$_POST[name]', '$_POST[email]', '$_POST[job]')");
$last_id = mysqli_insert_id($con); 
?>

PDO PDO::lastInsertId()

<?php
$stmt = $con->prepare("INSERT INTO Buyers (name, email, job) VALUES (?,?,?)");
$stmt->bind_param("sss", $_POST['name'], $_POST['email'], $_POST['job']);
$stmt->execute();
$last_id = $con->lastInsertId();
?>

假设$con 为连接。

Mysqlmysql_insert_id()

<?php
mysql_query("INSERT INTO Buyers (name, email, job) VALUES ('$_POST[name]', '$_POST[email]', '$_POST[job]')");
$last_id = mysql_insert_id(); 
?>

NOTE: [The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead ]

【讨论】:

  • 谢谢@Anant :) 也谢谢你“@VamsiAbbineni 谢谢。当你发布答案和 cmets 时请保持这个屈膝礼。我希望你明白我想说的话. 谢谢 – Anant"
【解决方案2】:
SELECT x.*
  FROM messages x
  JOIN 
      ( SELECT from_id, MAX(time_sent) time_sent GROUP BY from_id ) y
    ON y.from_id = x.from_id 
   AND y.time_sent = x.time_sent;

这个谜题的最后一部分留给读者作为练习。

【讨论】:

  • 如果从不同线程同时插入多条记录,这将不起作用。
【解决方案3】:

使用 mysql_insert_id() 检索 ID。更多详情 - http://php.net/manual/en/function.mysql-insert-id.php

【讨论】:

  • 请注意,此功能已弃用。正确的解决方案是 mysqli_insert_id() 或 PDO::lastInsertId()。
猜你喜欢
  • 2016-03-19
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
相关资源
最近更新 更多