2012-04-06 16 views
2

フィールドに短い配列を格納したい。 (私はアイテムを別々に分解して別々に保管する理由があることを認識していますが、能力の低下を犠牲にして単純な保管オプションを選択しています)PHP/MYSQL配列の格納と取り出しの問題

$str = "one,two,three,four"; 
$array = explode (",",$str) 

次に、mysqlのテキストフィールドにinsert文を使用して保存します。これはうまく保存されているようです。 PhPAdminではフィールドにARRAYを表示し、$ arrayをエコーし​​た場合は "ARRAY"を出力します。

データを取得するときに問題が発生しています。

私はこれまでのところは良い

while($row = mysql_fetch_array($res)) { 
$array = $row['list']; //that's the field it is stored in 
echo $array; // echoes "ARRAY" 

//を使用して取得しています。しかし、配列の内容を出力しようとすると、エラーメッセージが表示されます。私はimplodeを使って試してみました。

$text = implode(",", $array);//yields error message improper argument in implode function 
foreach($array as $val) { 
    echo $val; 
} //yields error message improper argument for for each statement 

} 

私のエントリは適切な配列ではありませんか?何が問題なの?ご意見ありがとうございます。

+0

EDIT - ここでは、あなたの質問への答えを嘘のようです - http://stackoverflow.com/questions/1978438/save-php-array-to-mysql –

+0

'print_r($ array)'を実行するとどうなりますか? –

答えて

0

私は(あなたがシリアル化を使用しない場合)、その後

$str = "one,two,three,four"; 

理由を次のように配列文字列がある場合は、またserializeを使用してすることができると思いますあなたはあなたのデータベースにそれを挿入する前に配列を作っている、私はあなたが直接文字列を挿入することができると思う配列として文字列を使用する必要がある場合は、データベースから文字列を単に取得し、

while($row = mysql_fetch_array($res)) { 
$array = explode(",", $row['list']); // "one,two,three,four" 
echo $array[0]; // one 
+0

ありがとう、これはトリックでした。私は十分なポイントを持っていないので、私はあなたをupvoteすることはできませんが、これは行く方法だった...実際には、配列に同じ情報を含む文字列として行く必要はありません。 – user1260310

+0

あなたは歓迎されています。私はあなたの投票の限界を理解することができますが、15の投票が投票に足りるかもしれないし、問題がなければ満足しています。 :-) –

1

あなたが挿入しようとしているのは配列ではなく、PHPがあなたの配列を文字列形式であると評価したものです。データを適切に正規化せずにMySQLに配列を格納するには、シリアル化する必要があります。基本的には、

$serialized = implode(',', $arrayToStore); 

のようにして、それをMySQLに保存したいと考えています。アウトその途中で、あなたがやる:

$unserialized = explode(',', $arrayFromMySQL); 
2

このように配列を格納する通常の方法は、入力前にserializeのデータに、検索時にunserializeになります。

$array = array('one', 'two', 'three', 'four'); 
$stringToStore = serialize($array); 

以降:

while($row = mysql_fetch_array($res)) { 
    $array = unserialize($row['list']); 
    var_dump($array); 
} 
+0

それは配列として入りましたが、私は連載せずに集まりました。それは私が扱えるものではありませんでした。今のところ、私はちょうど答えを以下のように文字列を格納し、取得しました。私は逐次化のより良い取り扱いを学ぶ必要があります。 – user1260310

関連する問題