如何在插入之前获取MySQL行的ID

4

我可以通过mysql_insert_id()方法获取插入后的ID,但是我想把图片保存为ID-image_name.jpg的形式,并将其保存在名为Image_Name的列中。如何使用即将到来的ID保存图像呢?或者在INSERT过程之后保存图像文件会更好?


3
保存后,百分之百确定下一个 ID 是什么是无法知道的。 - N.B.
你想在图片的文件名中包含ID有什么特别的原因吗?对于所有传入的文件,我只是创建一个随机的文件名,然后将该文件名保存在数据库记录中。 - Martin Bean
4个回答

6

在INSERT操作后保存是最直接的方法。

mysql_query("INSERT INTO....."); // etc. etc.
$id = mysql_insert_id();
mysql_query("UPDATE table SET image = '$image_name' WHERE id = '$id'");

5

是的,在INSERT之后保存图像更好。当然,如果保存文件失败,您将需要撤销INSERT(使用DELETE或回滚事务)。如果使用标准命名方案,则不需要再次访问数据库以设置表中的文件名(因为表中不需要文件名)。


1
首先,在表中不需要文件名,就可以给它加上 +1 了。 - Pekka
为什么呢?你能解释一下吗? - srivani
@srivani:如果你总是将图像命名为 /some/path/image-$id.$ext 这样的格式,那么你就不需要在数据库中存储文件名,你只需要一个可以将这些部分拼接在一起的函数;但你需要在数据库中存储 MIME 类型,以便获取文件扩展名。另外一个好处是,如果你决定重新排列文件系统,你就不必修复数据库了。 - mu is too short

0

您可以使用临时唯一名称(例如20个字母的随机字符串)保存图像,并在插入完成后将其重命名。


0

正如其他人所说,您无法在插入之前可靠地获取ID。

如果要求图像文件名与行ID匹配,我建议使用mu的建议(在事务中进行INSERT,保存文件,UPDATE行,COMMIT事务)。

另一种选择(如果您没有id匹配文件名的要求)是使用uniqid()命名文件。这将允许您保存文件并使用单个查询插入行,而无需保持事务打开。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接