如何在PHP中获取MySQL表的最后插入ID?

时间:2009-11-06 06:49:21

标签: php mysql

我有一张表,经常插入新数据。我需要获取表格的最后一个ID。我怎么能这样做?

是否与SELECT MAX(id) FROM table相似?

23 个答案:

答案 0 :(得分:124)

如果您使用的是PDO,请使用PDO::lastInsertId

如果您使用的是Mysqli,请使用mysqli::$insert_id

如果你还在使用Mysql:

  

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

但如果必须,请使用mysql_insert_id

答案 1 :(得分:50)

有一个函数可以知道当前连接中插入的最后一个id

mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();

加上使用 max 糟糕的主意,因为如果您的代码在两个不同的会话中同时使用,则可能导致问题

该功能称为mysql_insert_id

答案 2 :(得分:21)

没关系。您也可以使用LAST_INSERT_ID()

答案 3 :(得分:18)

使用PDO

$pdo->lastInsertId();

使用Mysqli

$mysqli->insert_id;

Please, don't use mysql_* functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDOMySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial

答案 4 :(得分:9)

使用mysql_insert_id()功能。

查看类似问题here

答案 5 :(得分:7)

你写的内容会让你获得最大的id,假设它们是独一无二的并且自动递增,假设你可以选择并发问题就可以了。 由于您使用MySQL作为数据库,因此有一个特定的函数LAST_INSERT_ID()仅适用于插入的当前连接。
PHP为那个名为mysql_insert_id的函数提供了一个特定的函数。

答案 6 :(得分:4)

您可以通过内置的php函数mysql_insert_id();

获取最新的插入ID
$id = mysql_insert_id();

你也可以通过

获得最新的ID
$id = last_insert_id();

答案 7 :(得分:3)

可以使用mysql_insert_id(), 但是有一个关于使用它的特定说明,你必须在执行INSERT查询后调用它,意味着在同一个脚本会话中。 如果你使用它,否则它将无法正常工作。

答案 8 :(得分:3)

在codeigniter中获取最后插入的id 执行插入查询后,只需在数据库中使用一个名为insert_id()的函数,它将返回最后插入的id

例如:

$this->db->insert('mytable',$data);
echo $this->db->insert_id(); //returns last inserted id

在一行

echo $this->db->insert('mytable',$data)->insert_id();

答案 9 :(得分:3)

试试这个应该可以正常工作:

$link = mysqli_connect("localhost", "my_user", "my_password", "world");

$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);

echo mysqli_insert_id($link);

答案 10 :(得分:1)

注意:如果使用一个语句执行多个插入,则mysqli :: insert_id将不正确。

表格:

create table xyz (id int(11) auto_increment, name varchar(255), primary key(id));

现在,如果你这样做:

insert into xyz (name) values('one'),('two'),('three');

mysqli :: insert_id将为1而不是3.

要获得正确的值,请执行以下操作:

mysqli::insert_id + mysqli::affected_rows) - 1

这是文件,但有点模糊。

答案 11 :(得分:1)

我更喜欢使用纯MySQL语法来获取我想要的表的最后一个auto_increment id。

php mysql_insert_id()和mysql last_insert_id()仅提供最后一个交易ID。

如果您想要架构中任何表的最后一个auto_incremented ID(不仅是最后一个事务),您可以使用此查询

SELECT AUTO_INCREMENT FROM information_schema.TABLES
    WHERE TABLE_SCHEMA = 'my_database' 
    AND TABLE_NAME = 'my_table_name';

就是这样。

答案 12 :(得分:1)

很遗憾没有通过例子看到任何答案。

使用 Mysqli :: $ insert_id

$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$mysqli->query($sql);
$last_inserted_id=$mysqli->insert_id; // returns last ID

使用 PDO :: lastInsertId

$sql="INSERT INTO table (col1, col2, col3) VALUES (val1, val2, val3)";
$database->query($sql);
$last_inserted_id=$database->lastInsertId(); // returns last ID

答案 13 :(得分:1)

清洁简单 -

$selectquery="SELECT id FROM tableName ORDER BY id DESC LIMIT 1";
$result = $mysqli->query($selectquery);
$row = $result->fetch_assoc();
echo $row['id'];

答案 14 :(得分:0)

使用MySQLi事务我有时无法获得mysqli::$insert_id,因为它返回0.特别是如果我使用存储过程,则执行INSERT。所以在交易中还有另一种方式:

<?php

function getInsertId(mysqli &$instance, $enforceQuery = false){
    if(!$enforceQuery)return $instance->insert_id;

    $result = $instance->query('SELECT LAST_INSERT_ID();');

    if($instance->errno)return false;

    list($buffer) = $result->fetch_row();

    $result->free();

    unset($result);

    return $buffer;
}

?>

答案 15 :(得分:0)

使用 mysqli ,因为 mysql 正在取消

#include <iostream>
using namespace std;
int* computeSquares(int& n)
{
    int arr[10];
    n = 10;
    for (int k = 0; k < n; k++)
        arr[k] = (k + 1) * (k + 1);
return arr;
}

void f()
{
    int junk[100];
    for (int k = 0; k < 100; k++)'
        junk[k] = 123400000 + k;
}

int main()
{
    int m;
    int* ptr = computeSquares(m);
    f();
    for (int i = 0; i < m; i++) {
         cout << ptr[i] << ' ';
    }
}

答案 16 :(得分:0)

我试过

<强> mysqli_insert_id($ dbConnectionObj)

这将返回当前连接的最后一个插入ID,因此如果您正确管理连接,这应该有效。至少为我工作过。

答案 17 :(得分:0)

请使用PDP,然后尝试此

$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();

答案 18 :(得分:-1)

通过所有这些讨论,我假设检查max id的原因是知道下一个id应该是什么..(如果我的最大id为5则接下来将是5 + 1 = 6)。

&gt;&gt;如果这不是原因,我最好的道歉

如果其他人在您的CHECK和INSERT之间插入信息会给您错误的ID。

因此,如果您要创建可包含时间戳或其他唯一值的哈希,则可以解决此问题。

然后在同一个函数中,您可以使用空值和哈希值插入信息。如果您选择了AUTO_INCRECEMENT,那将创建ID。

然后在同一个函数中你仍然会有你的哈希值,你可以找到具有相同哈希值的id。 然后你可以使用mysql UPDATE完成填充空值。

这包括更多的连接,但它仍然是一种方法...

祝你好运解决它。

答案 19 :(得分:-1)

$ lastid = mysql_insert_id();

答案 20 :(得分:-1)

试试这个:

$sql = "INSERT INTO table_name VALUES (nininini)";
mysqli_query($connection, $sql);
mysqli_insert_id($connection);

答案 21 :(得分:-2)

如果您的表具有类似UserID,Emp_ID,...的AUTO INCREMENT列,那么您可以使用此查询来获取最后插入的记录 SELECT * FROM table_name其中UserID =(从table_name中选择MAX(UserID)) 在PHP代码中:

$con = mysqli_connect('localhost', 'userid', 'password', 'database_name');
                                if (!$con) {
                                    die('Could not connect: ' . mysqli_error($con));
                                }
                                $sql = "SELECT * FROM table_name where UserID=(select MAX(UserID)from table_name)";
                                $result = mysqli_query($con, $sql);

然后您可以将获取的数据用作您的要求

答案 22 :(得分:-3)

mysql_query("INSERT INTO mytable (product) values ('kossu')");

printf("Last inserted record has id %d\n", ***mysql_insert_id()***);