【发布时间】:2019-01-20 00:13:58
【问题描述】:
我有一个包含这些列的表格:
contest_id, exhibition_id, username, files
files 列包含我在放入数据库时序列化的图片,因为它们是多个文件。
files 的列是这样的
"a:3:{i:0;s:9:"10210.PNG";i:1;s:9:"99073.PNG";i:2;s:9:"89321.PNG";}"
我使用 PHP 执行了这个 SQL 语句
$a = mysqli_query($this->con, "SELECT username, GROUP_CONCAT(files) files from my_exhibition_contests WHERE exhibition_id='$id'");
然后继续用 PHP 写这个
$s=$a->fetch_all(MYSQLI_ASSOC);
foreach ($s as &$row) {
$row['files'] = unserialize($row['files']);
}
echo json_encode($s);
然后我在前端使用 angularjs 收集它。
我使用了GROUP_CONCAT(files),以便按用户名对其进行分组,并将具有该用户名的所有文件放在一行中。
问题是使用foreach ($s as &$row) 破坏了GROUP_CONCAT(files) 的目的,它只带来了一个结果,就像我使用GROUP BY 一样,但是在删除foreach ($s as &$row) 时,它按照我想要的方式工作(即它打包具有该特定用户名的文件中的所有行都在别名为 files 的单个列中,但每个文件索引中的值都以字符串格式序列化。
如何反序列化 files 数组中的每个索引。
举个例子,假设表格的第一行是这样的
contest_id: 1 exhibition_id: 5 username: John files: "a:3:{i:0;s:9:"10210.PNG";i:1;s:9:"99073.PNG";i:2;s:9:"89321.PNG";}"
第二行是这样的
contest_id: 2 exhibition_id: 5 username John: files: "a:3:{i:0;s:9:"33937.PNG";i:1;s:9:"26831.PNG";i:2;s:8:"6316.PNG";}"
当我删除 foreach 时,我得到了这个
username: John files: "a:3:{i:0;s:9:"10210.PNG";i:1;s:9:"99073.PNG";i:2;s:9:"89321.PNG";},a:3:{i:0;s:9:"33937.PNG";i:1;s:9:"26831.PNG";i:2;s:8:"6316.PNG";}"
它将所有内容放在我想要的单列文件中,但问题是它是以字符串格式序列化的。
当我输入foreach 行时,我得到了这个
username: John files : ["10210.PNG", "99073.PNG", "89321.PNG"]
这是一个数组格式,正是我想要的,但它只带来了第一行,我怎样才能让它成为数组格式,但带来所有的行?
【问题讨论】: