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

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

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

它类似于SELECT MAX(id) FROM table吗?

gweg asked 2019-09-09T20:56:18Z

22个解决方案

123 votes

如果您使用的是PDO,请使用mysql_insert_id。

如果您使用的是Mysqli,请使用mysql_insert_id。

如果你还在使用Mysql:

请不要在新代码中使用mysql_insert_id函数。 它们不再维护,并且已被正式弃用。 看到红色的盒子? 了解准备好的语句,并使用PDO或MySQLi - 本文将帮助您确定哪些。 如果您选择PDO,这是一个很好的教程。

但如果必须,请使用mysql_insert_id。

deceze answered 2019-09-09T20:56:57Z

50 votes

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

mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');

$id = mysql_insert_id();

加上使用max是一个坏主意,因为如果你的代码在两个不同的会话中同时使用,它可能会导致问题。

该函数名为mysql_insert_id

RageZ answered 2019-09-09T20:57:33Z

21 votes

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

x2. answered 2019-09-09T20:57:56Z

18 votes

使用PDO:

$pdo->lastInsertId();

使用Mysqli:

$mysqli->insert_id;

请不要在新代码中使用mysql_*函数。 它们不再维护,并且已被正式弃用。 看到红色的盒子? 了解准备好的语句,并使用PDO或MySQLi - 本文将帮助您确定哪些。 如果您选择PDO,这是一个很好的教程。

Neal answered 2019-09-09T20:58:33Z

9 votes

使用mysql_insert_id()函数。

在这里看到类似的问题

NawaMan answered 2019-09-09T20:59:02Z

7 votes

你写的内容会给你最大的mysql_insert_id,假设它们是唯一的并且自动递增,假设你可以选择并发问题就可以了。

由于您使用MySQL作为数据库,因此具有特定功能mysql_insert_id,该功能仅适用于执行插入的当前连接。

PHP提供了一个特定的功能,也称为mysql_insert_id。

dlamblin answered 2019-09-09T20:59:39Z

4 votes

您可以通过内置的php函数mysql_insert_id();获取最新的插入ID

$id = mysql_insert_id();

你也得到了最新的id

$id = last_insert_id();

Rahul answered 2019-09-09T21:00:12Z

3 votes

在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();

Narsimha answered 2019-09-09T21:00:45Z

3 votes

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

Mihail Dimitrov answered 2019-09-09T21:01:10Z

3 votes

试试这应该工作正常:

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

$query = "INSERT blah blah blah...";

$result = mysqli_query($link, $query);

echo mysqli_insert_id($link);

Sandhu answered 2019-09-09T21:01:34Z

1 votes

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

桌子:

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

现在,如果你这样做:

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

mysqli :: insert_id将是1而不是3。

要获得正确的值,请执行:

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

这是文件,但有点模糊。

bartonlp answered 2019-09-09T21:02:44Z

1 votes

我更喜欢使用纯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';

而已。

syjust answered 2019-09-09T21:03:27Z

1 votes

很遗憾没有看到任何一个例子的答案。

使用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

Rust answered 2019-09-09T21:04:03Z

1 votes

干净简单 -

$selectquery="SELECT id FROM tableName ORDER BY id DESC LIMIT 1";

$result = $mysqli->query($selectquery);

$row = $result->fetch_assoc();

echo $row['id'];

Hitesh answered 2019-09-09T21:04:28Z

0 votes

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

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;

}

?>

BlitZ answered 2019-09-09T21:04:54Z

0 votes

使用mysqli作为mysql正在进行描述

$mysqli = new mysqli("localhost", "yourUsername", "yourPassword", "yourDB");

/* check connection */

if (mysqli_connect_errno()) {

printf("Connect failed: %s\n", mysqli_connect_error());

exit();

}

// Conside employee table with id,name,designation

$query = "INSERT INTO myCity VALUES (NULL, 'Ram', 'Developer')";

$mysqli->query($query);

printf ("New Record has id %d.\n", $mysqli->insert_id);

/* close connection */

$mysqli->close();

?>

Poorna Rao answered 2019-09-09T21:05:19Z

0 votes

我试过了

mysqli_insert_id($ dbConnectionObj)

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

user2166373 answered 2019-09-09T21:05:57Z

0 votes

请使用PDP,然后试试这个

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

$stmt->execute();

$id = $db->lastInsertId();

Humphrey answered 2019-09-09T21:06:22Z

-1 votes

$ lastid = mysql_insert_id();

Treby answered 2019-09-09T21:06:48Z

-1 votes

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

>>如果这不是原因,我最好的道歉

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

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

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

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

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

祝你好运解决它。

Aurimas answered 2019-09-09T21:07:57Z

-2 votes

如果您的表具有类似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);

然后,您可以使用提取的数据作为您的要求

Naveen1425 answered 2019-09-09T21:08:28Z

-3 votes

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

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

khamar Balkrishna answered 2019-09-09T21:08:48Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值