【发布时间】:2014-09-04 13:25:21
【问题描述】:
我最近创建了一个带有复选框的搜索功能,用于查询提交的复选框值并将这些值返回到表中。 然而问题是某些复选框值(在数据库中)是序列化的。当我在 foreach 中为每个复选框值显示查询结果变量时,它返回序列化字符。显然我只想显示没有奇怪字符的字符串。
原始的一段代码,返回整个序列化字符如下:
if(count($tmp)>0){
for($i=0;$i<count($tmp);$i++){
echo "<tr>";
foreach($tmp[$i] as $key=>$value){
echo"<td>" . $value . "</td>";
}
echo "</tr>";
}
}
echo '</table>';
所以为了只显示数据库值的字符串,我尝试使用反序列化函数($tmp 是存储查询结果的变量)。然而,这有几个问题,即:
- echo 不支持反序列化
- 数据库和查询也可以返回非序列化数据(因此 $tmp 变量可以包含 a. 带有奇怪字符的序列化值和 b. 只是一个非序列化的普通字符串)。
- 因为反序列化函数也得到“正常”字符串,这些正常字符串将被输出为空白..
- 出于某种原因,数组/未序列化数据(使用 print_r)的输出显示的不是字符串,而是整个数组名称,如下所示:
Array ( [0] => [1] => Netherlands )。
下面的代码是我尝试反序列化数据的方式:
if(count($tmp)>0){
for($i=0;$i<count($tmp);$i++){
echo "<tr>";
foreach($tmp[$i] as $key=>$value){
echo "<td>";
$b=unserialize($value);
print_r($b);
echo "</td>";
}
echo "</tr>";
}
}
echo '</table>';
尽管如前所述,上面的代码显示了整个数组名称,而数据库的“普通”字符串也被查询,显示为空白。
那么如何解决这个问题呢?
提前谢谢你
【问题讨论】:
标签: php mysql sql arrays deserialization