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

我有一个新的数据频繁插入的表。 我需要得到表格的最后一个ID。 我该怎么做?

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

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

如果你使用Mysqli,使用mysqli::$insert_id

如果你还在使用Mysql:

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

但是如果你必须使用mysql_insert_id

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

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

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

该函数被称为mysql_insert_id

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

用PDO :

 $pdo->lastInsertId(); 

与Mysqli :

 $mysqli->insert_id; 

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

使用mysql_insert_id()函数。

在这里看到类似的问题

你写的会给你最大的id假设他们是独特的,自动递增,假设你可以邀请并发问题,那就没问题了。
由于您使用MySQL作为数据库,因此具有特定的函数LAST_INSERT_ID() ,该函数仅适用于执行插入操作的当前连接。
PHP提供了一个称为mysql_insert_id的特定函数。

你可以通过build立的php函数mysql_insert_id();获得最新插入的id mysql_insert_id();

 $id = mysql_insert_id(); 

你也可以通过获取最新的ID

 $id = last_insert_id(); 

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

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

试试这应该工作得很好:

 $link = mysqli_connect("localhost", "my_user", "my_password", "world"); $query = "INSERT blah blah blah..."; $result = mysqli_query($link, $query); echo mysqli_insert_id($link); 

注意:如果你用一个语句执行多个插入,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

这是文件,但它有点模糊。

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

而已。

用一个例子看到任何答案都很难过。

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

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

 <?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; } ?> 

使用mysqli作为mysql正在depricating

 <?php $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(); ?> 

清洁和简单 –

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

$ lastid = mysql_insert_id();

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

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

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

所以它可以解决,如果你会创build哈希,可能包括时间戳或其他独特的价值。

然后在相同的function,你可以插入你的信息与空值和你的散列。 如果您select了AUTO_INCRECEMENT,则会创buildID。

然后在同样的function,你仍然会有你的散列,你可以find相同的哈希id。 然后你可以用mysql UPDATE完成填充空值。

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

祝你好运,解决它。

如果你的表有USERID,Emp_ID这样的AUTO INCREMENT列,那么你可以使用这个查询来获取最后插入的loggingSELECT * FROM table_name其中UserID =(从table_name中selectMAX(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); 

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

 mysql_query("INSERT INTO mytable (product) values ('kossu')"); printf("Last inserted record has id %d\n", ***mysql_insert_id()***);