3

php を使用serialize()して配列をシリアル化します。次に、データベースに入れます(列タイプのテキスト)。私の配列には、中国語や日本語の文字など、他の言語の文字が含まれています。

シリアル化してデータベースに正しく保存することはできますが、シリアル化された配列をデータベースから取得してシリアル化を解除して配列を使用できるようにすると、機能しません。シリアル化解除された配列は空白になります。

これが私のコードです、スクリプトを保存します:

$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 に答える