这就是我的争吵:https://github.com/blueimp/jQuery-File-Upload
我遇到this topic这对我的问题很敏感:
我有一些产品,你应该可以关联多个图像。
我有3张桌子
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 []变量。现在我只是给它一个静态数字。
我无法弄清楚为什么它会显示查询指向的图像?
我错过了什么吗?
答案 0 :(得分:0)
您只选择列id
和name
(上面的数据库架构中似乎没有提及),但是您指的是名为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)
应该很快告诉你。