PHP / MySQL插入行然后得到'身份证'

当我插入一行时,表格自动的'id'字段增加。 我想插入一行,然后获得该ID。

我会这样做,就像我说的那样,但有没有办法可以做到这一点,而不必担心插入行和获得ID之间的时间?

我知道我可以查询数据库中与input的信息相匹配的行,但有一个很大的变化会有重复,唯一的区别是id。

mysqli_query("INSERT INTO mytable (1, 2, 3, 'blah')"); $id = mysqli_insert_id(); 

请参阅mysqli_insert_id()

不pipe你做什么,都不要插入,然后做一个“ SELECT MAX(id) FROM mytable ”。 就像你说的那样,这是一个竞赛条件,没有必要。 mysqli_insert_id()已经具有这个function。

MySQL函数LAST_INSERT_ID()正好满足您的需求:它会检索在此会话期间插入的ID。 因此,即使有其他进程(例如,其他人正在调用完全相同的脚本),也可以使用安全的方式将值插入到同一个表中。

PHP函数mysql_insert_id() SELECT LAST_INSERT_ID()与使用mysql_query()调用SELECT LAST_INSERT_ID()的方法相同。

至于PHP的网站,现在不推荐使用mysql_insert_id,我们必须使用PDO。 要使用PDO执行此操作,请按以下步骤操作:

 $db = new PDO('mysql:dbname=database;host=localhost', 'user', 'pass'); $statement = $db->prepare('INSERT INTO people(name, city) VALUES(:name, :city)'); $statement->execute( array(':name' => 'Bob', ':city' => 'Montreal') ); echo $db->lastInsertId(); 

正如@NaturalBornCamper所说, mysql_insert_id现在已被弃用 ,不应该被使用。 这些选项现在可以使用PDO或mysqli。 NaturalBornCamper在他的回答中解释了PDO,所以我将展示如何使用mysqli_insert_id与MySQLi ( MySQL改进版 ) 一起完成此操作 。

 // First, connect to your database with the usual info... $db = new mysqli($hostname, $username, $password, $databaseName); // Let's assume we have a table called 'people' which has a column // called 'people_id' which is the PK and is auto-incremented... $db->query("INSERT INTO people (people_name) VALUES ('Mr. X')"); // We've now entered in a new row, which has automatically been // given a new people_id. We can get it simply with: $lastInsertedPeopleId = $db->insert_id; // OR $lastInsertedPeopleId = mysqli_insert_id($db); 

查看更多示例的PHP文档: http : //php.net/manual/en/mysqli.insert-id.php

我只是想添加一个关于lastInsertId()的小细节;

当input多行时,它不会返回最后一个ID ,而是最后一个插入的集合的第一个ID。

考虑下面的例子

 $sql = 'INSERT INTO my_table (varNumb,userid) VALUES (1, :userid), (2, :userid)'; $sql->addNewNames = $db->prepare($sql); addNewNames->execute(array(':userid' => $userid)); echo $db->lastInsertId(); 

这里发生的是我推my_table两个新行。 表的id是自动递增的。 在这里,对于同一个用户,我用不同的varNumb添加两行。

最后的回显值将等于varNumb=1的行的ID,这意味着不是最后一行的ID,而是最后一次请求中添加的第一行的ID。

一个例子。

  $query_new = "INSERT INTO students(courseid, coursename) VALUES ('', ?)"; $query_new = $databaseConnection->prepare($query_new); $query_new->bind_param('s', $_POST['coursename']); $query_new->execute(); $course_id = $query_new->insert_id; $query_new->close(); 

代码行$course_id = $query_new->insert_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

另外请注意这个扩展在PHP5.5中被弃用,并在PHP7.0中被删除

我在上面的链接中find了答案http://php.net/manual/en/function.mysql-insert-id.php

答案是:

 mysql_query("INSERT INTO tablename (columnname) values ('$value')"); echo $Id=mysql_insert_id(); 

另一个可能的答案是:

当你定义表格时,将会有列和数据。 列ID可以具有属性AUTO_INCREMENT

通过这种方法,你不必担心身份证 ,它会自动进行

例如(取自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的部分,获得它创build之后,以前的答案是正确的。