反序列化查询(数组)数据不起作用

时间:2014-09-04 13:25:22

标签: php mysql sql arrays deserialization

我最近创建了一个搜索功能,其复选框可以查询提交的复选框值,并将这些值返回到表中。 但问题是某些复选框值(在数据库中)是序列化的。当我在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>';

因此,为了显示数据库值的字符串,我尝试使用unserialize函数($ tmp就像存储查询结果的变量一样)。然而,有几个问题,即:

  1. echo不适用于unserialize
  2. 数据库和查询也可以返回非序列化数据(因此$ tmp变量可以包含带有奇怪字符的。序列化值和b。只是一个非序列化的普通字符串)。
  3. 因为unserialize函数也会得到'普通'字符串,所以这些法线符号将作为空格输出..
  4. 由于某种原因,数组/未序列化数据(带有print_r)的输出不显示字符串,而是显示整个数组名称,如下所示:Array ( [0] => [1] => Netherlands )
  5. 以下代码是我尝试反序列化数据的方式:

      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>';
    

    尽管如前所述,上面的代码显示了整个数组名称,同样查询的数据库的“普通”字符串显示为空白。

    那么该如何解决这个问题呢?

    提前谢谢

1 个答案:

答案 0 :(得分:0)

Php unserialize可以返回几个东西,包括你的情况下的数组。这样做

foreach($tmp[$i] as $key=>$value){              
echo "<td>";
$b=unserialize($value);
   if(is_array($b)){
     //this assumes your array is always like this Array ( [0] => [1] => Netherlands )
     echo $b[1];
    }
   else{
     echo $value;
    }
echo "</td>";                                                   
}