PHP/MySQL 插入行然后得到 'id'

标签 php mysql

当我插入一行时,表的“id”字段会自动增加。我想插入一行然后获取该 ID。

我会按照我说的去做,但是有没有一种方法可以让我不用担心插入行和获取 id 之间的时间?

我知道我可以在数据库中查询与输入的信息相匹配的行,但是变化很大,会有重复项,唯一的区别是 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() 已经具有此功能。

<小时/>

另一种方法是一次性运行两个查询,并使用 MySQLLAST_INSERT_ID() 方法,其中两个表都会同时修改(PHP 也这样做)不需要任何 ID),例如:

mysqli_query($link, "INSERT INTO my_user_table ...;
  INSERT INTO my_other_table (`user_id`) VALUES (LAST_INSERT_ID())");

Note that Each connection keeps track of ID separately (so, conflicts are prevented already).

关于PHP/MySQL 插入行然后得到 'id',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56409550/

相关文章:

mysql - jTable 在使用 node.js 进行 MySQL INSERT 后不显示新行内容

MySQL 表没有正确对齐

php - 我可以从 HTTP 客户端获取 TLS secret 来解密我自己的 HTTPS 对话吗?

php - Yii2:如何使用 POST 方法重定向?

javascript - 禁用表单提交可防止发送按钮属性

mysql - 在 Windows-7-x64 上使用 DBI Perl 和 MySql 未定义 $DBI::errstr

php - 使用mysqli防止sql注入(inject),如何设置NULL或CURRENT_DATE?

mysql - 更改 mysql 的默认排序行为

php - php根据id添加数据库字段

php - 在 php 7.4 中重写匿名函数