【问题标题】:Using next AUTO_INCREMENT id within query?在查询中使用下一个 AUTO_INCREMENT id?
【发布时间】:2014-12-10 13:55:33
【问题描述】:

我知道有人问过类似的问题,但似乎没有一个适合我正在尝试的问题。

我正在使用 mysqli/php 开发一个系统,它可以获取音频文件、上传它们、重命名它们并存储名称。唯一的问题是......我需要文件名是“uploadedfile_[$id_here].mp3”

我已经让整个上传系统正常工作,但我正处于最后一步......让 id 工作。

此表中的 id 列是 Auto_Increment。我只需要了解如何“预测”将提供给即将到来的新行的 Auto_Increment ID,并通过变量将其标记在音频文件名的末尾。

我尝试过的一种方法是:

$result = mysqli_query($conn, "SHOW TABLE STATUS LIKE 'test_table'");
$row = mysqli_fetch_array($result);
$nextId = $row['Auto_increment'];

print $nextId;

但这不会返回任何结果。我的连接文件应该正确配置,因为我已经将它用于其他查询并且它工作正常。

提前致谢!

【问题讨论】:

  • 您无法预测多用户系统中的下一个自动增量 ID。解决方案是使用存根记录进行插入,获取为其分配的 id 以在文件名中使用,然后根据需要更新存根
  • 扩展 Mark 的评论 - 将数据库部分放入事务中,因此如果您因任何原因无法持久保存文件,很容易取消。
  • 那么获取 a_i 值然后 +1?
  • 不。启动事务,插入记录,使用 a_i 字段保存文件。如果一切正常,则提交,如果失败,则回滚。
  • @Daniel - 不.. 考虑用户 #1,获得 a_i 值 7,加 1 得到 8;同时用户 #2 也得到 a_i 值 7,加 1 得到 8;用户 #1 写入 id 为 8 的数据库;用户 #2 还尝试使用 id 8 写入数据库.....您现在有一个损坏的数据库.....您永远不会尝试预测下一个 a_i 值将是什么,您总是使用实际的 a_i 值由数据库在创建记录时分配

标签: php mysqli auto-increment


【解决方案1】:

这真的取决于这段代码运行的频率,确定吗?

自动递增的工作原理是每次增加 1。插入了一条记录,我自己刚刚启动了 PHP,但您当然可以在您的...中添加 1...

 $nextId = $row['Auto_increment'];

这将为您提供下一个 ID。除非,正如 Maerlyn 所说,您同时有两个用户,在这种情况下,我认为您可以在插入记录的同时插入临时表,如果成功,插入主表并从临时表中删除.插入临时表时,您首先必须运行检查以查看临时表中是否已存在记录,然后再尝试任何操作。

只要我的两分钱。

【讨论】:

  • 让它运行,将 1 添加到值中,现在它可以完美地将 id 添加到末尾。因为这是针对通常只有一个人使用的网站的后端,所以重复不应该是问题。谢谢大家!
  • 如果你觉得我回答了你的问题,你可以接受它作为答案。
【解决方案2】:

只需执行您的 INSERT 查询,然后获取 $mysqli->insert_id

http://php.net/manual/ru/mysqli.insert-id.php

【讨论】:

    猜你喜欢
    • 2013-05-16
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多