如何在INSERT之前获得mysql行的ID


How to get the ID of a mysql row before INSERT

我可以得到ID后插入mysql_insert_id();但我想以id - Image_Name。jpg的形式保存图像,并将其保存在名为Image_Name的列中。我如何保存即将生成ID的图像?还是最好在INSERT过程之后保存映像文件?

在INSERT过程之后保存它是最直接的方法。

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

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

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

正如其他人所说,在INSERT之前无法可靠地获得ID。

如果要求映像文件名与行ID匹配,我会坚持mu的建议(在事务中插入,保存文件,更新行,提交事务)。

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