我有一张表,经常插入新数据。我需要获取表格的最后一个ID。我怎么能这样做?
是否与SELECT MAX(id) FROM table
相似?
答案 0 :(得分:124)
如果您使用的是PDO,请使用PDO::lastInsertId
。
如果您使用的是Mysqli,请使用mysqli::$insert_id
。
如果你还在使用Mysql:
Please, don't use
mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
但如果必须,请使用mysql_insert_id
。
答案 1 :(得分:50)
有一个函数可以知道当前连接中插入的最后一个id
mysql_query('INSERT INTO FOO(a) VALUES(\'b\')');
$id = mysql_insert_id();
加上使用 max 是糟糕的主意,因为如果您的代码在两个不同的会话中同时使用,则可能导致问题。
该功能称为mysql_insert_id
答案 2 :(得分:21)
没关系。您也可以使用LAST_INSERT_ID()
答案 3 :(得分:18)
使用PDO:
$pdo->lastInsertId();
使用Mysqli:
$mysqli->insert_id;
Please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
答案 4 :(得分:9)
使用mysql_insert_id()功能。
查看类似问题here
答案 5 :(得分:7)
你写的内容会让你获得最大的id
,假设它们是独一无二的并且自动递增,假设你可以选择并发问题就可以了。
由于您使用MySQL作为数据库,因此有一个特定的函数LAST_INSERT_ID()
仅适用于插入的当前连接。
PHP为那个名为mysql_insert_id
的函数提供了一个特定的函数。
答案 6 :(得分:4)
您可以通过内置的php函数mysql_insert_id();
$id = mysql_insert_id();
你也可以通过
获得最新的ID$id = last_insert_id();
答案 7 :(得分:3)
可以使用mysql_insert_id()
,
但是有一个关于使用它的特定说明,你必须在执行INSERT查询后调用它,意味着在同一个脚本会话中。
如果你使用它,否则它将无法正常工作。
答案 8 :(得分:3)
在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();
答案 9 :(得分:3)
试试这个应该可以正常工作:
$link = mysqli_connect("localhost", "my_user", "my_password", "world");
$query = "INSERT blah blah blah...";
$result = mysqli_query($link, $query);
echo mysqli_insert_id($link);
答案 10 :(得分:1)
注意:如果使用一个语句执行多个插入,则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
这是文件,但有点模糊。
答案 11 :(得分: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';
就是这样。
答案 12 :(得分:1)
很遗憾没有通过例子看到任何答案。
使用 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
答案 13 :(得分:1)
清洁简单 -
$selectquery="SELECT id FROM tableName ORDER BY id DESC LIMIT 1";
$result = $mysqli->query($selectquery);
$row = $result->fetch_assoc();
echo $row['id'];
答案 14 :(得分:0)
使用MySQLi
事务我有时无法获得mysqli::$insert_id
,因为它返回0.特别是如果我使用存储过程,则执行INSERT
。所以在交易中还有另一种方式:
<?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;
}
?>
答案 15 :(得分:0)
使用 mysqli ,因为 mysql 正在取消
#include <iostream>
using namespace std;
int* computeSquares(int& n)
{
int arr[10];
n = 10;
for (int k = 0; k < n; k++)
arr[k] = (k + 1) * (k + 1);
return arr;
}
void f()
{
int junk[100];
for (int k = 0; k < 100; k++)'
junk[k] = 123400000 + k;
}
int main()
{
int m;
int* ptr = computeSquares(m);
f();
for (int i = 0; i < m; i++) {
cout << ptr[i] << ' ';
}
}
答案 16 :(得分:0)
我试过
<强> mysqli_insert_id($ dbConnectionObj) 强>
这将返回当前连接的最后一个插入ID,因此如果您正确管理连接,这应该有效。至少为我工作过。
答案 17 :(得分:0)
请使用PDP,然后尝试此
$stmt = $db->prepare("...");
$stmt->execute();
$id = $db->lastInsertId();
答案 18 :(得分:-1)
通过所有这些讨论,我假设检查max id的原因是知道下一个id应该是什么..(如果我的最大id为5则接下来将是5 + 1 = 6)。
&gt;&gt;如果这不是原因,我最好的道歉
如果其他人在您的CHECK和INSERT之间插入信息会给您错误的ID。
因此,如果您要创建可包含时间戳或其他唯一值的哈希,则可以解决此问题。
然后在同一个函数中,您可以使用空值和哈希值插入信息。如果您选择了AUTO_INCRECEMENT,那将创建ID。
然后在同一个函数中你仍然会有你的哈希值,你可以找到具有相同哈希值的id。 然后你可以使用mysql UPDATE完成填充空值。
这包括更多的连接,但它仍然是一种方法...
祝你好运解决它。
答案 19 :(得分:-1)
$ lastid = mysql_insert_id();
答案 20 :(得分:-1)
试试这个:
$sql = "INSERT INTO table_name VALUES (nininini)";
mysqli_query($connection, $sql);
mysqli_insert_id($connection);
答案 21 :(得分:-2)
如果您的表具有类似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);
然后您可以将获取的数据用作您的要求
答案 22 :(得分:-3)
mysql_query("INSERT INTO mytable (product) values ('kossu')");
printf("Last inserted record has id %d\n", ***mysql_insert_id()***);