2011-12-10 29 views
1

どのようにデータベースに配列を格納しますか?データベースに配列を格納する

// $データ配列も

$v = base64_encode(json_encode($data)); 

$todo = 'INSERT INTO table (data) VALUES("' . $v . '")'; 
$sql = mysql_query($todo); 

である理由私は、データベース内の配列を格納する前にBASE64_ENCODEを呼び出す必要があります:

次は私がやっている何ですか?

+0

データベースに格納するために 'base64_encode'を使用しなければならないと言った人は誰ですか? 'json_encode'や' serialize'だけで何が問題になっていますか? –

+0

通常、配列をデータベースに格納するのは良くありません。あなたは何を見ているのですか? – ajreal

答えて

2

あなたがしていることは間違っている可能性があります。あなたがした多くの決定は、必要な手段ではなく、適切でないかもしれません。

データベースに「フリーズ」された配列を格納することは、通常は悪い考えです。なぜなら、それらを取得する以外には何もできないからです(それらを変更することも、内容に基づいてクエリすることもできません)。この問題を「解決する」ソリューションは、データベース指向であり、テーブルスキーマの変更を含みます。私はあなたが何をしようとしているのか分からないので、私は詳細には触れません。あなたは、データベース内の配列をシリアライズしたい場合は

はその後、(合法的なユースケースがある)(編集:!とPHPコードのみを介してそれらにアクセスしようとする - 非常に正確に指摘されたよう)、唯一のものは、はまたは他のものではなく、serializeの機能です。これが関数が存在する理由です。値をデータベースから取得したら、deserializeを使用して配列を元に戻します。

最後に、SQLクエリに変数を挿入するときは、mysql_real_escape_string(これは実行していない)でエスケープする必要があります。

だから、やる方が良いずっと次のようになります。

$sql = sprintf('INSERT INTO table (data) VALUES(\'%s\')', 
       mysql_real_escape_string(serialize($data))); 
$result = mysql_query($sql); 
+0

必ずしも間違っているとは限りません。配列内の個々の値を検索/検索したくない場合は問題ありません。 –

+1

@yi_H:私は「通常」と「正当なユースケースがある」と言います。 – Jon

+0

私はそれに同意できないと思います。彼がやっていることの背後にある目的を知らなければ、この方法はずっと良いと言っても正確ではないかもしれません。たぶん本当に必要なのは、配列の 'split()'でデータ要素を行に格納することです。 –

1

を呼び出す必要はありませんが、mysql_real_escape_stringで値をエスケープする必要があります。

0

当然リレーショナルデータベースに配列を格納しないでください。

あなたの配列からbase64を取得することは、データベースに文字列を格納できるようにトリックのようです。

+0

データベースに配列を格納する正当な理由があります。多くはありませんが、存在します。 –

+0

@George Cummins私はそこに理由があるとは言いませんでした。しかし、データベースは通常、配列フィールド型を直接サポートしません。 –

+0

実際、テーブル*はデータ(行)の配列であり、クエリするときには少し「メタ」になる傾向があります。ただし、データが格納され、照会されない場合は、正当なユースケースです。 –

1

base64_encode()を呼び出す必要はありません。 json_encode()はすでに文字列になっています...もちろん、UTF-8でエンコードされた値は$dataに制限されています。

これは配列を格納する正当な方法ですが、テーブルを配列とみなして1行に1つの値を格納することもできます。さらに、データの内容が区切り文字と重ならない場合は、データをXML文字列、またはCSV/TSVとして保存することもできます。

ボトムラインは実際にはあなたの状況によりますが、あなたが提示したコードからはうまくいきますが、うまく機能するようにしたい場合は、もっと多くの情報が必要になります。

注:データベースに入力する前にデータをサニタイズしてください。

関連する問題