我可以通过mysql_insert_id()方法获取插入后的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或回滚事务)。如果使用标准命名方案,则不需要再次访问数据库以设置表中的文件名(因为表中不需要文件名)。
/some/path/image-$id.$ext
这样的格式,那么你就不需要在数据库中存储文件名,你只需要一个可以将这些部分拼接在一起的函数;但你需要在数据库中存储 MIME 类型,以便获取文件扩展名。另外一个好处是,如果你决定重新排列文件系统,你就不必修复数据库了。 - mu is too short您可以使用临时唯一名称(例如20个字母的随机字符串)保存图像,并在插入完成后将其重命名。
正如其他人所说,您无法在插入之前可靠地获取ID。
如果要求图像文件名与行ID匹配,我建议使用mu的建议(在事务中进行INSERT,保存文件,UPDATE行,COMMIT事务)。
另一种选择(如果您没有id匹配文件名的要求)是使用uniqid()命名文件。这将允许您保存文件并使用单个查询插入行,而无需保持事务打开。