如何在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

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

  1. php mysql query 行数_如何在PHP中获取MYSQL数据库返回的数据的行数?

    展开全部 1. mysql_num_rows 可得到e69da5e887aa3231313335323631343130323136353331333337383861查询记录数<?php $c ...

  2. java+script+当前日期_如何在JavaScript中获取当前日期?

    如何在JavaScript中获取当前日期? #1楼 您可以使用扩展了 Date对象的Date.js库,从而可以使用.today()方法. #2楼 如果您想对日期格式进行更多的粒度控制,我强烈建议您查看 ...

  3. java文件中获取创建日期_如何在Java中获取文件的上次修改日期

    java文件中获取创建日期 Sometimes we need to get the file last modified date in Java, usually for listeners li ...

  4. jquery 获取同级元素_如何在jQuery中获取元素的同级

    jquery 获取同级元素 In this post, we will discuss how to get the siblings of an HTML element in jQuery. jQ ...

  5. python获取当前时间戳_如何在Python中获取当前时间戳?

    在Python中可以使用来自模块time.datetime或calendar的函数来获取当前时间戳,代码语句如[import time;ts = time.time() print(ts)]. 在Py ...

  6. php7.2 mysql 教程_如何在PHP7中扩展mysql,先安装php7.2。后安装mysql

    相对与PHP5,PHP7的最大变化之一是移除了mysql扩展,推荐使用mysqli或者pdo_mysql,实际上在PHP5.5开始,PHP就着手开始准备弃用mysql扩展,如果你使用mysql扩展,可 ...

  7. mysql 导入创建表空间_说说在 Oracle11g 中如何创建表空间、创建用户并授权以及导入与导出数据...

    假设 Oracle11g 已在本机安装成功. 1 创建表空间 打开 sqlplus 工具:开始-->所有程序--> Oracle –OraDb11g_home1-->应用程序开发-- ...

  8. mysql 减少文件排序_消除更新查询中的mysql文件排序

    我有这样的表用于在mysql中实现队列: CREATE TABLE `queue` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `queue_na ...

  9. mysql 查看用户权限_在Navicat Premium中管理MySQL用户 - 第4部分:权限管理器工具

    更多资源请查看:[Navicat使用教程2019.1] | [Navicat Data Modeler使用教程] 第4部分:Privilege Manager(权限管理器)工具 在本系列教程中,我们一 ...

最新文章

  1. 2015年的ResNet潜力都挖掘出来了吗?新研究:不用蒸馏、无额外数据,性能还能涨一波...
  2. 你知道数据中心宕机的真正成本吗?
  3. Oracle-批量修改语句及相关知识点
  4. myeclipse启动php,myeclipse,jdk_启动myeclipse报错,myeclipse,jdk - phpStudy
  5. python+办公自动化_Python办公自动化之操作excel
  6. AT:配置/禁用PSM模式和设置T3324/T3412
  7. 7天内新闻前加 new
  8. java6_64.tar配置,Ubuntu 下Java-JDK6的安装与环境配置
  9. 配置cfree 5 支持C++11
  10. Re-ranking Person Re-identification with k-reciprocal Encoding笔记
  11. python常用模块介绍
  12. 程序员如何看待实力与运气
  13. 拉丁舞身形研究之恰恰恰
  14. python eml解析_如何在python中读取eml文件?
  15. Docker 容器的--restart参数
  16. 请收下这份秘籍: 这里有关于申请 gTech 职位所需知道的一切
  17. 找回你的xournal++未保存文档
  18. 跨域请求的API接口
  19. 夫琅禾费单缝衍射matlab分析,夫琅禾费单缝衍射光强分布MATLAB分析毕业设计论文...
  20. Google I/O 2021 发布 Flutter 2.2

热门文章

  1. 时域信号matlab实现
  2. isdigit()、isalpha()、isalnum() 三个函数的区别和注意点
  3. laravel用crud之index列出产品items
  4. [bzoj] 2049 洞穴勘探 || LCT
  5. Long Way To Go 之 Python 5 (2)
  6. Standard C++ Episode 10
  7. 深度学习——从文件中载入训练数据
  8. oracle查询哪些数据未压缩,求助大佬:向压缩表插入数据,压缩未生效
  9. 实战经验:关于Oracle Delete数据后空间重用问题的测试
  10. Cloudarrow V2.0 正式发布!