[英]How to get the ID of the last inserted row in the table in MySql with PHP
[英]How do I get the last inserted ID of a MySQL table in PHP?
我有一个经常插入新数据的表。 我需要获取表的最后一个 ID。 我怎样才能做到这一点?
它类似于SELECT MAX(id) FROM table
吗?
如果您使用 PDO,请使用PDO::lastInsertId
。
如果您使用的是 Mysqli,请使用mysqli::$insert_id
。
如果您仍在使用 Mysql:
请不要在新代码中使用
mysql_*
函数。 它们不再被维护并被正式弃用。 看到 红框了吗? 了解准备好的语句,并使用PDO或MySQLi -本文将帮助您决定哪个。 如果您选择 PDO,这里有一个很好的教程。
但如果必须,请使用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 -本文将帮助您决定哪个。 如果您选择 PDO,这里有一个很好的教程。
使用mysql_insert_id()函数。
在这里看到类似的问题
假设您编写的内容是唯一且自动递增的,那么您编写的内容将为您提供最大的id
,假设您可以接受并发问题。
由于您使用 MySQL 作为数据库,因此有特定的函数LAST_INSERT_ID()
仅适用于执行插入操作的当前连接。
PHP 也为此提供了一个特定的函数,称为mysql_insert_id
。
试试这个应该可以正常工作:
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);
echo mysqli_insert_id($link);
在 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 查询后调用它,意味着在同一个脚本会话中。 如果您使用它,否则它将无法正常工作。
您可以通过内置的php函数mysql_insert_id();
获取最新插入的id mysql_insert_id();
$id = mysql_insert_id();
您还可以通过以下方式获得最新的 ID
$id = last_insert_id();
干净简单 -
$selectquery="SELECT id FROM tableName ORDER BY id DESC LIMIT 1";
$result = $mysqli->query($selectquery);
$row = $result->fetch_assoc();
echo $row['id'];
注意:如果你用一个语句进行多次插入,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正在贬低
<?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();
?>
请使用PDP,然后尝试
$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();
通过所有这些讨论,我认为检查最大ID的原因是要知道下一个ID是什么(如果我的最大ID是5,则下一个将是5 + 1 = 6)。
>>如果不是这个原因,我最好的歉意
如果其他人在您的CHECK和INSERT之间插入信息会给您错误的ID。
因此,可以解决是否创建包含时间戳或其他唯一值的哈希。
然后,在同一函数中,您可以使用空值和哈希值插入信息。 如果您选择了AUTO_INCRECEMENT,则将创建ID。
然后,在相同的函数中,您仍将拥有哈希,并且可以使用相同的哈希查找id。 然后,您可以使用mysql UPDATE完成填充空值。
这包括更多的连接,但仍然是一种方法。
祝你好运解决它。
$ lastid = mysql_insert_id();
我试过
mysqli_insert_id($dbConnectionObj)
这将返回当前连接的最后插入的 id,因此如果您正确管理您的连接,这应该可以工作。 至少为我工作。
尝试这个:
$sql = "INSERT INTO table_name VALUES (nininini)";
mysqli_query($connection, $sql);
mysqli_insert_id($connection);
如果您的表具有AUTO INCREMENT列(如UserID,Emp_ID等),则可以使用此查询获取最后插入的记录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);
然后,您可以使用提取的数据作为需求
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", ***mysql_insert_id()***);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.