3

我使用 phpserialize()来序列化一个数组。然后我把它放在数据库中(列类型文本)。我的数组包含其他语言字符,如中文或日文字符。

它能够正确序列化并将其存储在数据库中,但是,当我从数据库中获取序列化数组并将其反序列化以便我可以使用该数组时,它将不起作用,反序列化数组将是空白的。

这是我的代码,保存脚本:

$all = array (
    "points" => '123',
    "photo" => '写真',
    "video" => 'video'
);

$sall = serialize($all);

mysql_query("UPDATE users SET lang = '$sall' WHERE uname='$uname'")
    or die(mysql_error()); 

检索脚本:

$result = mysql_query("SELECT * FROM users WHERE uname='$uname'")
    or die(mysql_error());

$row = mysql_fetch_array($result);

if($row) {
    $lang = $row['lang'];
    $orilang = unserialize($lang);
    // orilang contains the array
    echo $orilang['photo'];
}
else {

}

$orilang['photo']出来是空的,但 $lang有序列化的数据。

4

2 回答 2

3

由于serialize()不是二进制安全的,我建议您用来json对数据进行编码:

$all = array (
    "points" => '123',
    "photo" => '写真',
    "video" => 'video'
);
$sall = json_encode($all);
// {"points":"123","photo":"\u5199\u771f","video":"video"}

$decode = json_decode($sall, true);

/*array(3) {
  ["points"]=>
  string(3) "123"
  ["photo"]=>
  string(6) "写真"
  ["video"]=>
  string(5) "video"
}*/

附带说明一下,如果您开始构建一些东西,我建议您迁移到 MySQLi 或 PDO,mysql_*函数已被弃用。是一个很好的教程,可以帮助您开始使用 PDO。

要获得结果:

$result = mysql_query("SELECT * FROM users WHERE uname='$uname'")
    or die(mysql_error());

$row = mysql_fetch_assoc($result);

if($row) {
    $lang = $row['lang'];
    $orilang = json_decode($lang, true);
    // orilang contains the array
    echo $orilang['photo'];

    // or
    // $orilang = json_decode($lang);
    // echo $orilang->photo;

} else {

}
于 2012-10-08T06:38:45.267 回答
1

你可以试试json

$all = array (
    "points" => '123',
    "photo" => '写真',
    "video" => 'video'
  );

  $sall = json_encode($all);

    mysql_query("UPDATE users SET lang = '$sall' WHERE uname='$uname'")
    or die(mysql_error()); 


$result = mysql_query("SELECT * FROM users WHERE uname='$uname'")
   or die(mysql_error()); 
   $row = mysql_fetch_array($result);
   if($row)
   {
     $lang = $row['lang'];
     $orilang = json_decode($lang,true);//for getting assoc array add second param  as true
     //orilang contains the array
     echo $orilang['photo'];
   }
   else{
   }

参考http://php.net/manual/en/function.json-decode.php

于 2012-10-08T06:39:58.027 回答