【问题标题】:How to get the ID of a mysql row before INSERT如何在INSERT之前获取mysql行的ID
【发布时间】:2011-11-18 11:51:23
【问题描述】:

我可以通过 mysql_insert_id(); 在 INSERT 之后获取 ID;但我想以 ID-image_name.jpg 的形式保存图像并将其保存在名为 Image_Name 的列中。如何使用即将到来的 ID 保存图像?还是在 INSERT 处理后保存图像文件更好?

【问题讨论】:

  • 保存后,你无法百分百确定下一个ID是什么。
  • 您是否有任何特殊原因要将 ID 包含在图像的文件名中?我只是为所有传入文件创建一个随机文件名,然后将该文件名保存在数据库记录中。

标签: php mysql database insert


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • +1 表示表格中不需要文件名
    • 这是为什么呢?你能解释一下吗?
    • @srivani:如果您总是将图像称为/some/path/image-$id.$ext,那么您不需要数据库中的文件名,您只需要一个可以将碎片粘贴在一起的函数;你会想要数据库中的 MIME 类型,这会给你扩展。一个好处是,如果您决定重新排列文件系统,则不必修复数据库。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 2017-07-24
        • 1970-01-01
        • 2012-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多