当我插入一行时,我的表的'id'字段自动增加。我想插入一行,然后获取ID。
我会像我说的那样做,但是有没有一种方法可以让我不用担心插入行和获取id之间的时间?
我知道我可以在数据库中查询与输入的信息相匹配的行,但是有很大的变化,会有重复,唯一的区别是id。
当我插入一行时,我的表的'id'字段自动增加。我想插入一行,然后获取ID。
我会像我说的那样做,但是有没有一种方法可以让我不用担心插入行和获取id之间的时间?
我知道我可以在数据库中查询与输入的信息相匹配的行,但是有很大的变化,会有重复,唯一的区别是id。
当前回答
我在上面的链接http://php.net/manual/en/function.mysql-insert-id.php中找到了答案
答案是:
mysql_query("INSERT INTO tablename (columnname) values ('$value')");
echo $Id=mysql_insert_id();
其他回答
$link = mysqli_connect('127.0.0.1', 'my_user', 'my_pass', 'my_db');
mysqli_query($link, "INSERT INTO mytable (1, 2, 3, 'blah')");
$id = mysqli_insert_id($link);
看到mysqli_insert_id()。
无论你做什么,不要插入,然后做一个“SELECT MAX(id) FROM mytable”。就像你说的,这是一个竞争条件,没有必要。Mysqli_insert_id()已经有了这个功能。
另一种方法是一次运行两个查询,并使用MySQL的LAST_INSERT_ID()方法,其中两个表被一次修改(PHP不需要任何ID),如:
mysqli_query($link, "INSERT INTO my_user_table ...;
INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");
注意,每个连接都单独跟踪ID(因此,已经防止了冲突)。
另一个可能的答案是:
当您定义表时,它将具有列和数据。列id可以具有AUTO_INCREMENT属性。
通过这个方法,你不用担心id,它会自动生成。
例如(选自w3schools)
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
)
希望这对某些人有所帮助。
编辑:这只是定义如何生成自动ID的部分,创建后获取,之前的答案都是正确的。
试着这样做,你就能得到答案:
<?php
$con=mysqli_connect("localhost","root","","new");
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con,"INSERT INTO new values('nameuser','2015-09-12')");
// Print auto-generated id
echo "New record has id: " . mysqli_insert_id($con);
mysqli_close($con);
?>
看看下面的链接:
http://www.w3schools.com/php/func_mysqli_insert_id.asp
http://php.net/manual/en/function.mysql-insert-id.php
另外请注意,此扩展在PHP 5.5中已弃用,并在PHP 7.0中删除
MySQL函数LAST_INSERT_ID()所做的正是您所需要的:它检索在会话期间插入的id。因此,使用它是安全的,即使有其他进程(例如,其他人调用完全相同的脚本)将值插入到同一个表中。
PHP函数mysql_insert_id()的作用与使用mysql_query()调用SELECT LAST_INSERT_ID()相同。
我在上面的链接http://php.net/manual/en/function.mysql-insert-id.php中找到了答案
答案是:
mysql_query("INSERT INTO tablename (columnname) values ('$value')");
echo $Id=mysql_insert_id();