我如何获得在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()***);