Blueimp仅选择特定行

时间:2016-07-05 15:53:26

标签: php mysql

这就是我的争吵:https://github.com/blueimp/jQuery-File-Upload

我遇到this topic这对我的问题很敏感:

我有一些产品,你应该可以关联多个图像。

我有3张桌子

产品------------------ img_connecter ------------------- images

p_id  p_name             fk_p_id    fk_i_id               i_id  i_name  

1     Car                1          1                     1     car_1.jpg
2     Bus                1          2                     2     car_2.jpg
3     Truck              2          3                     3     bus_1.jpg

这是UploaderHandler.php文件中的代码:

protected function get_file_objects($iteration_method = 'get_file_object') {
    $upload_dir = $this->get_upload_path();
    if (!is_dir($upload_dir)) {
        return array();
    }
    return array_values(array_filter(array_map(
        array($this, $iteration_method),
        scandir($upload_dir)
    )));
}

scandir函数显示文件夹中的所有图像,所以我试图将其更改为:

protected function get_file_objects() {

    $files = $this->query(" SELECT i_name FROM images i
                            LEFT JOIN img_connector c ON (c.fk_i_id = i.i_id)
                            LEFT JOIN products p ON (c.fk_p_id = p.p_id)
                            WHERE p_id = 1");
    $files_array=array();
    while($row = $files->fetch()){
        array_push($files_array, $row['i_name']);
    }

    return array_values( array_filter( array_map(
        array($this, 'get_file_object'),
        $files_array
    ) ) );
}

查询“WHERE p_id = 1”

的查询

1将是一个$ _GET []变量。现在我只是给它一个静态数字。

我无法弄清楚为什么它会显示查询指向的图像?

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

您只选择列idname(上面的数据库架构中似乎没有提及),但是您指的是名为i_name的行你的结果集。 The query you're looking for is this one

$files = $this->query("SELECT i_name FROM images i
    LEFT JOIN img_connector c ON (c.fk_i_id = i.i_id)
    LEFT JOIN products p ON (c.fk_p_id = p.p_id)
    WHERE p_id = 1
");

所以,接下来你(非常冗长地)将它们粘贴到一个数组中。假设你接受了我的建议并使用PDO进行数据库访问,那么立即获取所有文件名并没有什么坏处:

$files_array = $files->fetchAll(PDO::FETCH_COLUMN);

然后你通过$this->get_file_object()传递数组的每个实例,删除任何空数,然后返回剩余的值。

return array_values(
    array_filter(
        array_map([$this, 'get_file_object'], $files_array)
    )
 );

因此,唯一需要检查的是get_file_object正在做什么。它将返回false的唯一实例是上传目录中是否存在该文件。因此,请确保文件位于应有的位置。

所有这些预示着您实际上拥有有效的数据库连接;做一个var_dump($files_array)应该很快告诉你。