2016-07-27 2 views
3

"order_details"と呼ばれるDBテーブル行にいくつかの注文情報が格納されています。私はこれまで何をやったか研究から、細胞は、シリアル化された配列含まれていますデータのシリアル化解除

s:346:"{"total":50,"tax_perc":8.25,"shipping_total":20,"discount_total":0,"discount":"","pick_up":0,"items":[{"id":"0","amount":1,"available":1000,"price":50,"first_pet":50,"pet_count":1,"size":"4x6","type":"portrait","clothe":"93","total":50}],"size_found":false,"taxes_total":4.13,"grand_total":74.13}"; 

私はアンシリアライズを使用してみましたが()が、それは何も印刷されませんでした。それを直列化したままにすると、少なくともセルの内容が印刷されます。

私はunserialize()を使用すると何も印刷されない理由についてのアイデアはありますか?

また、このデータを使用してバックエンドインターフェイスを作成しようとしています。そのため、unserialize()でこのデータを整理すると、特定の要素(IDなど)のみを表示できる必要があります。それは可能ですか?それとも、すべてのデータを印刷する必要がありますか?誰かが注文をするとき (1)、データがシリアル化され、デシベルに投げ込まれているとメールが私とクライアント (2)の両方に送信されます。ここでは

UPDATE は私が持っているもの、これまでどのように動作するかですこの管理ページでは、シリアル化されたデータを照会して表示するために、IDで指定された関連テーブルを返すようクエリします。 (3)次に、このデータをUIのテーブル行にスローする。

$mydata = $all_orders[$i]['order_details']; 
$mydata = unserialize($mydata); 
echo '<td>' . $mydata . '</td>'; 

この時点で、私はそのデータをよりよく視覚化しようとしています。私はおそらく、価格、身分証明書、などでテーブルを並べ替えることができるようにしたいと思っていた

あなたの応答を事前に感謝!

+2

どのようにデータのシリアル化を解除していますか?コードを表示する! –

+0

'unserialize()'は、エラー時にブール値FALSEを返します。これは/ echoを長さゼロの文字列(例えば、不可視)として出力します。代わりに 'var_dump()'が必要です。 –

+0

@ MarkBakerいくつかのコードを表示するために質問を更新しました。あなたがもっと見る必要がある場合は私に教えてください。 – coatandtails

答えて

2

データベースの文字列は、JSONが文字列にエンコードされてからシリアル化されています。そのため、シリアライズされた文字列の最初の文字は「s」です(sは、次の文字列は文字列で、長さは346文字です)。

unserialize()が返されるのはfalseです。理由は、シリアル化された文字列にエスケープされていない二重引用符が含まれているためです。 unserialize()が実行されると、最初の2組の二重引用符を使用してシリアル化解除する文字列を判別するので失敗します。あなたの場合は、アンシリアライズ()次の文字列をアンシリアライズしようとしている:二重引用符の2つのセットの間の文字列が346文字ではないよう

s:346:"{" 

これは、故障の原因となります。

すでにJSONでエンコードされているものをシリアル化する必要はありません。エンコードオプション(JSONエンコードまたはシリアライズ)のいずれかを選択しますが、両方を選択しないでください。

+0

ありがとうDavid!私はそれを撃つだろう。 – coatandtails

関連する問題