(mysql,php)如何在插入数据之前获取auto_increment字段值?

Kir*_*lla 10 php mysql

我正在将图像文件上传到存储服务器.在上传之前,我应该编写文件名,其中包含AUTOINCREMENT VALUE(例如,12345_filename.jpg).

在插入数据库之前如何获得自动增量值?

我只看到一个解决方案

  1. 插入空行
  2. 得到它的自动增量值
  3. 删除此行
  4. 使用p.1中的autoincrement值插入包含实际数据的行

还有其他解决方案吗?

谢谢

Pas*_*TIN 13

插入完成后,自动增量值由数据库本身生成; 这意味着在进行实际的插入查询之前无法获取它.

您提出的解决方案不是经常使用的解决方案 - 这将是:

  • 插入一些半空数据
  • 获取已生成的自动增量值
  • 使用该自动增量值进行计算
  • 更新行以将新/完整数据放在适当的位置 - 使用查询where子句中先前生成的自动增量update来标识正在更新的行.

当然,作为安全预防措施,所有这些操作都必须在事务中进行(以确保"全有或全无"行为)


作为伪代码:

begin transaction
insert into your table (half empty values);
$id = get last autoincrement id
do calculations
update set data = full data where id = $id
commit transaction
Run Code Online (Sandbox Code Playgroud)

  • 我也不建议使用图像文件名中数据库行的ID来提高安全性.相反,使用像`uniqid()`这样的东西. (2认同)

Ale*_*lex 8

好吧,试试这个:

$query = "SHOW TABLE STATUS LIKE 'tablename'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
var_dump($row);
Run Code Online (Sandbox Code Playgroud)

输出:

array(18) {
[...]
["Auto_increment"]=> string(4) "3847"
[...]
}
Run Code Online (Sandbox Code Playgroud)

这将是您的下一个auto_increment ID.