【问题标题】:How do I get the last inserted id from a MySQL database table? [duplicate]如何从 MySQL 数据库表中获取最后插入的 id? [复制]
【发布时间】:2015-03-20 18:33:16
【问题描述】:

我的数据库中有一个“用户”表,当有人创建一个新帐户时,我想要,而不是对 id 进行自动递增,而是获取最后插入的 id 的值,将其加 1,然后插入它与其余的创建用户数据。我现有的代码是:

<?php
mysql_connect("localhost","username","password");
mysql_select_db("db");

$fname = $_POST['fname'];
// ... get all the other info from create user form


$query = "INSERT INTO Users ('fname','lname','email','username','password') 
          VALUES 
          ('$fname','$lname','$email','$username','password')"

我想要做的是从表中最后一个用户(行)的用户表中获取“id”,然后给它加 1,代码如下:

$query = "INSERT INTO Users ('id','fname','lname','email','username','password') 
VALUES 
('$id','$fname','$lname','$email','$username','$password')";

我该怎么做呢?

编辑:感谢大家对我的关心,让我想起了 SQL 注入。我提供的代码是我正在做的一个最小示例。我不想把所有这些都放在我的例子中。不过还是谢谢

【问题讨论】:

  • 小心 SQL 注入。在插入 SQL 之前,您应该从 POST 中转义输入
  • 你为什么使用phps mysql api?它已弃用...如果您使用 mysqli 或 pdo,您可以使用他们的 api 中支持的 last_insert_id
  • 是的,我知道@Raptor。我提供的代码不准确。这只是我所做的事情的粗略草图。感谢您的意见
  • +1d 值有什么用?听起来不对

标签: php mysql


【解决方案1】:

你可以使用mysql_insert_id();函数:

$query = "INSERT INTO Users ('fname','lname','email','username','password') 
          VALUES 
          ('$fname','$lname','$email','$username','password')"
$lastid=mysql_insert_id(); /* GET THE ID OF THE INSERT QUERY */
$lastid++; /* INCREMENT THE ID */

对您未来的一些提示: 使用mysqli prepared statement 而不是mysql。阅读更多关于 SQL 注入的信息here

【讨论】:

  • $newincrementedid --- 那是什么?
  • @zerkms - 你说你想得到最后一个 ID,然后自己增加它?!
  • @zerkms - 哎呀..:P
  • $lastid=++$lastid --- 哦,天哪。说真的,将1 加到一个整数上有多难?
  • @LoganWayne 我不知道为什么反对票对你来说如此重要......我删除了我的反对票,因为你现在有一个正确的答案而不是一个不正确的答案。即使它与我们的回复有所不同……它只是一个网站。不要对简单的投票感到恐惧,它是生活的一部分……有时是负面的,有时是正面的,它是生活的一部分。我们都从中学习并成长
【解决方案2】:
  1. mysql_insert_id()

    mysql_query("INSERT QUERY ...");
    $id = mysql_insert_id();
    
  2. 改用 mysqli(或 PDO)。

    $mysqli->query($query);
    $id = $mysqli->insert_id
    printf ("New Record has id %d.\n", $id);
    
  3. 正确逃生!因为你很容易受到 SQL 注入的攻击。

  4. 增量:$lastid = $lastid + 1; 或只是$id++

    自动增量是有原因的。使用它。

【讨论】:

  • $new_id = $id++; --- 它不会像你想象的那样工作(这就是不变性摇滚的原因)
  • 你怎么知道我的想法? :) 读心者?
  • 我知道这个问题,我可以读取变量名。 $new_id 不会是新值,而是旧值。所以如果$id = 1,那么在那个声明之后new_id = 1, id = 2。这是您真正期望的还是我正确地读懂了您的想法?
  • $id++ 是否给出增量前的值?还是他需要++$id?我总是很困惑。
  • @johnny 遵循$id++ == return value, then ++ 的顺序。 ++$id == ++, then return value
猜你喜欢
  • 2014-01-20
  • 2010-12-14
  • 1970-01-01
  • 2010-12-07
  • 2019-01-16
  • 2017-08-24
  • 2010-12-13
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多