どのようにデータベースに配列を格納しますか?データベースに配列を格納する
// $データ配列も
$v = base64_encode(json_encode($data));
$todo = 'INSERT INTO table (data) VALUES("' . $v . '")';
$sql = mysql_query($todo);
である理由私は、データベース内の配列を格納する前にBASE64_ENCODEを呼び出す必要があります:
次は私がやっている何ですか?
どのようにデータベースに配列を格納しますか?データベースに配列を格納する
// $データ配列も
$v = base64_encode(json_encode($data));
$todo = 'INSERT INTO table (data) VALUES("' . $v . '")';
$sql = mysql_query($todo);
である理由私は、データベース内の配列を格納する前にBASE64_ENCODEを呼び出す必要があります:
次は私がやっている何ですか?
あなたがしていることは間違っている可能性があります。あなたがした多くの決定は、必要な手段ではなく、適切でないかもしれません。
データベースに「フリーズ」された配列を格納することは、通常は悪い考えです。なぜなら、それらを取得する以外には何もできないからです(それらを変更することも、内容に基づいてクエリすることもできません)。この問題を「解決する」ソリューションは、データベース指向であり、テーブルスキーマの変更を含みます。私はあなたが何をしようとしているのか分からないので、私は詳細には触れません。あなたは、データベース内の配列をシリアライズしたい場合は
はその後、(合法的なユースケースがある)(編集:!と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);
必ずしも間違っているとは限りません。配列内の個々の値を検索/検索したくない場合は問題ありません。 –
@yi_H:私は「通常」と「正当なユースケースがある」と言います。 – Jon
私はそれに同意できないと思います。彼がやっていることの背後にある目的を知らなければ、この方法はずっと良いと言っても正確ではないかもしれません。たぶん本当に必要なのは、配列の 'split()'でデータ要素を行に格納することです。 –
を呼び出す必要はありませんが、mysql_real_escape_stringで値をエスケープする必要があります。
当然リレーショナルデータベースに配列を格納しないでください。
あなたの配列からbase64を取得することは、データベースに文字列を格納できるようにトリックのようです。
データベースに配列を格納する正当な理由があります。多くはありませんが、存在します。 –
@George Cummins私はそこに理由があるとは言いませんでした。しかし、データベースは通常、配列フィールド型を直接サポートしません。 –
実際、テーブル*はデータ(行)の配列であり、クエリするときには少し「メタ」になる傾向があります。ただし、データが格納され、照会されない場合は、正当なユースケースです。 –
base64_encode()を呼び出す必要はありません。 json_encode()はすでに文字列になっています...もちろん、UTF-8でエンコードされた値は$data
に制限されています。
これは配列を格納する正当な方法ですが、テーブルを配列とみなして1行に1つの値を格納することもできます。さらに、データの内容が区切り文字と重ならない場合は、データをXML文字列、またはCSV/TSVとして保存することもできます。
ボトムラインは実際にはあなたの状況によりますが、あなたが提示したコードからはうまくいきますが、うまく機能するようにしたい場合は、もっと多くの情報が必要になります。
注:データベースに入力する前にデータをサニタイズしてください。
データベースに格納するために 'base64_encode'を使用しなければならないと言った人は誰ですか? 'json_encode'や' serialize'だけで何が問題になっていますか? –
通常、配列をデータベースに格納するのは良くありません。あなたは何を見ているのですか? – ajreal