使用PHP从文件夹中获取图片名称 - 然后在其中查找数字,然后分别为每个数字插入MySQL表格

时间:2015-04-20 23:07:52

标签: php mysql mysql-insert-id

我有这个文件夹d:/data/pics,图片名为1101-a.jpg1101-b.jpg1102-a.jpg1102-b.jpg等。图片a和b的编号始终相同 - 请注意,此a和b仅仅代表“数字 - ”部分之后的文本。但对于每个数字,总有2个结果。

我有一个带有'pics'表的MySQL数据库。它有列'id','number','title1'和'title2'。 'number'列已经有1101,1102,1103等。

我需要从目录中查找所有图片,从他们的名字中取出数字,在我的MySQL表中查找相同的数字,并将相应的图片名称插入数据库。对于每个数字,有两个图片。

现在,我知道如何从目录中获取名称,但是我无法将其插入数据库,因为我有两个相同数字的图片,我需要在mySQL中与同一行配对。

     $directory = opendir("d:/data/images"); 
     $image_format = array("jpg, jpeg, png");
     $image_names = array(); 
     while ($file = readdir ($directory)) {
     if(in_array(substr(strtolower($file), strrpos($file,".") + 1),$image_format))
     {
     array_push($image_names,$file);
      }
     foreach ($image_names as $row) {
     //HERE I NEED THE NUMBER IN PIC'S NAME EXTRACTED AS A VALUE FOR EACH PIC:
     $pic_number = "$_GET INTEGER FROM IMAGE_NAMES (or $row)" ;
     // this i don't know.
     $id = $_GET($row['id']);
     $number = $_GET($row['number']);
     //NOW HERE I NEED THAT $pic_number FROM image_names ABOVE... and then
     $sql = "INSERT INTO images (title1, title2) VALUES ($row) WHERE $number = $pic_number;";
     mysql_query($sql); 
     }
     }
     closedir($directory);

我在没有逃脱的情况下写短文,尽可能地简化问题。

2 个答案:

答案 0 :(得分:1)

我会做这样的事情:

$images = glob("d:/data/images/*-a.{jpg,png,jpeg}", GLOB_BRACE));
foreach($images as $img){
$path_parts = pathinfo($img);
$img = $path_parts['basename'];
$ext = $path_parts['extension'];

$imge = explode('-',$img);
$pic_number = $imge[0];

$file1 = $pic_number."-a.".$ext;
$file2 = $pic_number."-b.".$ext;

.....
}

答案 1 :(得分:0)

两个循环解决方案是imo的方式。如果您在number列上设置唯一索引,则可以进行高效的多行更新(无论如何)。您可以使用MySQL ON DUPLICATE KEY UPDATE子句。在使用以下代码之前,请务必在number列上添加唯一索引(唯一id是不够的):

$img_files = glob("files/*.{jpg,JPG,png,PNG,jpeg,JPEG}", GLOB_BRACE);
$data = array();
foreach ($img_files as $img_file) {
    $filename = basename($img_file);
    $split_filename = explode('-', $filename, 2);
    $number_prefix = (int) $split_filename[0];
    $data[$number_prefix][] = $filename;
}

// assuming 0 can't be prefix number $data[0] represents invalid file (without number prefix) - not needed aparently
// unset($data[0]);

$insert_values = '';
foreach ($data as $number => $row) {
    $title1 = $row[0];
    $title2 = isset($row[1]) ? $row[1] : ''; // empty string in case there's no second file
    $insert_values .= "('$number','$title1','$title2'),";
}

$sql = 'INSERT INTO images (number, title1, title2) VALUES ' . substr($insert_values, 0, -1) . '
        ON DUPLICATE KEY UPDATE title1 = VALUE(title1), title2 = VALUE(title2)';
//... run query

没有索引UPDATE查询很容易在第二个循环中构建(具有数字和两个文件名)。

编辑:循环UPDATE版本:

//... $insert_values not needed
foreach ($data as $number => $row) {
    $title1 = $row[0];
    $title2 = isset($row[1]) ? $row[1] : ''; // empty string in case there's no second file
    $sql = "UPDATE images SET title1 = '$title1', title2 = '$title2' WHERE number = $number";
    // ... execute query
}