2

SQL からシリアル化されていないデータを取得したいのですが、最初の行しか表示されません。なにが問題ですか?

$cars=unserialize($rows["cars"]);
foreach($cars as $car)
{
  echo "<li>".$car."</li>";
}

SQL テーブルのフィールドは次のようになります。

a:2:{s:6:"car";s:9:"mercedes";s:6:"ps";s:46:"120";}
a:2:{s:6:"car";s:7:"audi";s:6:"ps";s:74:"145";}
4

1 に答える 1

0

まず、シリアル化された文字列が無効です: a:2:{s:3:"car";s:8:"mercedes";s:2:"ps";s:3:"120";} a:2 :{s:3:"car";s:4:"audi";s:2:"ps";s:3:"145";} は正しいです。

2番:

これらの値を連結することはできず、次の動作しない例のようにシリアル化を解除します。

unserialize('a:2:{s:3:"car";s:8:"mercedes";s:2:"ps";s:3:"120";}a:2:{s:3:"car";s:4:"audi";s:2:"ps";s:3:"145";}');

これにより、最初のエントリのみが返されます。1. その文字列を事前に改行で分割するか、シリアル化された 1 つの文字列としてデータベースに正しく書き込みます。次のようになります。

var_dump(serialize(array(array('car'=>'mercedes', 'ps' => '120'), array('car'=>'audi', 'ps' => '145'))));
string(110) "a:2:{i:0;a:2:{s:3:"car";s:8:"mercedes";s:2:"ps";s:3:"120";}i:1;a:2:{s:3:"car";s:4:"audi";s:2:"ps";s:3:"145";}}"

更新:申し訳ありませんが、「8件のコメントリンク」が表示されませんでした

于 2013-02-14T07:46:19.190 に答える