【问题标题】:MySQL Database & PHP - Match row with files and append extensionMySQL 数据库和 PHP - 将行与文件匹配并附加扩展名
【发布时间】:2013-03-17 14:58:30
【问题描述】:

我遇到了以下问题:

我从我的上级手中接过一个由他开发的 MS-SQL 数据库。遗憾的是,数据库的开发状况非常糟糕。

我已经将数据库“转换”为 MySQL 并导入了数据。现在的问题是,有一个表“hotels”,其中包含名为“image1、image2、image3”等的行,直到 image24。我将它们从表中删除并创建了一个名为 hotel_images 的新表,其中图像被分配给一家酒店。现在来描述我的问题:

导入的数据包含每个图像的字符串,例如“007593-20110809-145433-01”,但缺少扩展名。所有图片都放在同一个目录下(大约有4000张),只保存了字符串。

当我将数据拉入网站时,我自己已经做了一个变通功能,我在其中检查 file_exists,然后返回不同的扩展名(.BMP、.GIF、JPG 等),但我不喜欢这个解决方案。

我是否有可能使用图像文件夹检查单个表中可用的所有字符串,如果字符串匹配,则将适当的扩展名添加到表中?应该是这样的

SELECT image from hotel_images (search for value in /images/) IF MATCH ALTER TABLE hotel_images set image = this + .extension

如果有任何建议,我将不胜感激!

编辑:我刚刚注意到我可以对文件夹中的文本文件进行目录列表,然后将其与表中的每个字符串进行匹配,如果匹配则替换它 - 这是一个可能的解决方案吗?

【问题讨论】:

    标签: php mysql search replace


    【解决方案1】:

    您必须选择所有行(不带扩展名)

    然后,在 PHP 中,对所有图像进行 foreach 以查找它们是否存在于文件夹中,获取它们的扩展名

    然后使用现有文件名更新行,添加扩展名...

    举个例子:

    $images_query = mysql_query("SELECT id, image_name from hotel_images");
    
    while($image = mysql_fetch_array($images_query)){
      if(file_exists($image["image_name"])){
        //Get extension
        $ext = "...";
    
        //Then update row with new name
        mysql_query("UPDATE hotel_images SET image_name = '" . $image["image_name"] . $ext ."' WHERE id = " . $image["id"]);
    
      }
    
    }
    

    你在寻找类似的东西吗?

    它没有经过测试的脚本,直接在 SO textarea 中进行的;)

    【讨论】:

    • 当然....为什么我一直没有想到这一点。谢谢你的提示;)
    • 没问题!祝你有美好的一天
    猜你喜欢
    • 2019-07-07
    • 2011-10-17
    • 2011-07-31
    • 2020-08-03
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    相关资源
    最近更新 更多