【问题标题】:SQL PHP get last IDSQL PHP获取最后一个ID
【发布时间】:2017-05-14 14:14:56
【问题描述】:

我有一个非常基本的 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 之前都执行插入操作会发生什么?

谢谢

【问题讨论】:

  • 你为什么不试试告诉我们?

标签: mysql sql


【解决方案1】:

来自documentation

mysqli_insert_id() 函数返回由对具有 AUTO_INCREMENT 属性的列的表的查询(通常是 INSERT)生成的 ID。如果没有通过此连接发送 INSERT 或 UPDATE 语句,或者如果修改后的表没有具有 AUTO_INCREMENT 属性的列,则此函数将返回零。

强调我的。

换句话说,函数mysqli_insert_id返回当前连接插入的ID。 PHP 不是“线程化的”,这意味着在启动新请求之前,每个请求都已完成并终止(有些简化,但您可以这样想)。这与函数的实现一起保证了您将获得正确的返回 ID。

【讨论】:

    【解决方案2】:

    为了避免冲突,您可以在插入之前进行以下查询:

    <?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
    
    ?>
    

    这应该可以避免你的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多