我有一个非常基本的Web服务(PHP),可以将数据插入两个表中。
非常简单的脚本
$conn = new MySQLi($servername, $username, $password, $dbname);
$sql = "INSERT INTO db (NAME) VALUES ('$Name')";
mysqli_query($conn,$sql);
下一个表插入非常简单,但使用上表/插入中的自动递增ID。
如果我使用$ conn-> insert_id如果我有两个线程使用这个脚本并且在我调用insert_id之前都进行插入会发生什么?
由于
答案 0 :(得分:1)
mysqli_insert_id()函数返回由具有AUTO_INCREMENT属性的列的表上的查询(通常是INSERT)生成的ID。如果没有通过此连接发送INSERT或UPDATE语句,或者如果修改后的表没有具有AUTO_INCREMENT属性的列,则此函数将返回零。
强调我的。
换句话说,函数mysqli_insert_id
返回用当前连接插入的ID。 PHP不是"线程",这意味着每个请求在新的启动之前完成并被杀死(有些简化,但你可以这样想)。这与函数的实现一起保证您将获得正确的ID返回。
答案 1 :(得分:0)
为避免冲突,您可以在插入之前执行以下查询:
<?php
$sql = "SELECT your_incremented_id FROM db ORDER BY DESC LIMIT 1";
$result=mysqli_query($conn,$sql);
$id_result=mysql_fetch_assoc($result);
//get the last inserted row id
$id=$id_result['your_incremented_id']+1;
$time=rand(0,0.2);
sleep($time);
// your insert query with the new id
?>
应该避免你的问题