【发布时间】: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