插入行时,表格的"id"字段会自动增加.我想插入一行然后获取该ID.
我会像我说的那样做,但有没有办法可以做到这一点而不用担心插入行和获取ID之间的时间?
我知道我可以在数据库中查询与输入的信息相匹配的行,但是有一个很大的变化会有重复,唯一的区别是id.
cle*_*tus 253
$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);
Run Code Online (Sandbox Code Playgroud)
无论你做什么,都不要插入然后做" SELECT MAX(id) FROM mytable".就像你说的那样,这是竞争条件,没有必要.mysqli_insert_id()已经有这个功能.
sou*_*rge 39
MySQL函数LAST_INSERT_ID()正是您需要的:它检索在此会话期间插入的id .因此,使用它是安全的,即使有其他进程(例如,其他人调用完全相同的脚本)将值插入到同一个表中.
PHP函数mysql_insert_id()不一样的调用SELECT LAST_INSERT_ID()与mysql_query().
Nat*_*per 28
至于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();
Run Code Online (Sandbox Code Playgroud)
Luk*_*uke 20
作为@NaturalBornCamper说,mysql_insert_id现在已经过时,应该不会被使用.选项现在使用PDO或mysqli.NaturalBornCamper在他的回答中解释了PDO,因此我将展示如何使用mysqli_insert_id使用MySQLi(MySQL Improved).
// 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);
Run Code Online (Sandbox Code Playgroud)
查看PHP文档以获取更多示例:http://php.net/manual/en/mysqli.insert-id.php
我只想添加一个小细节lastInsertId();
当时输入多行时,它不会返回最后一个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();
Run Code Online (Sandbox Code Playgroud)
这里发生的是我推入my_table两个新行.表的id是自动递增的.在这里,对于同一个用户,我添加了两行不同的行varNumb.
最后的回显值将等于行的id varNumb=1,这意味着不是最后一行的id,而是最后一个请求中添加的第一行的id.
| 归档时间: |
|
| 查看次数: |
234959 次 |
| 最近记录: |