web-dev-qa-db-ja.com

mysqlデータベースに配列を保存する

Paypalに注文全体を送信する前に、追加情報を保存したいと思います。アイテムごとに、MySQLデータベースに格納する単一の列を作成しました。今、私は後でPHPページを作成するために読むことができる配列として保存します。追加のフィールドは入力フォームフィールドから取得されます。

配列を使用することで、情報を混同しないようにできますか?

19
user1343454

serialize / unserialize を使用して配列を保存できます。そのソリューションでは、他のプログラミング言語から簡単に使用できないため、代わりに json_encode // json_decode を使用することを検討できます(これにより、サポートされている形式)。 Avoidこれにはimplode/explodeを使用してください。バグやセキュリティの欠陥に陥る可能性が高いからです。

これによりテーブルが非正規化されることに注意してください。データを簡単にクエリできないため、これは悪い考えかもしれません。したがって、先に進む前にこれを慎重に検討してください。統計などのデータを照会する必要がありますか?データを正規化する他の理由はありますか?

また、生の$_POST配列を保存しないでください。誰かが簡単に独自のWebフォームを作成し、サイトにデータを投稿できるため、多くのスペースを必要とする非常に大きなフォームを送信できます。必要なフィールドを保存し、保存する前にデータを検証してください(無効な値が取得されないようにします)。

34
Emil Vikström

そのようなことを行う方法は、serializing配列を使用することです。これは、「文字列を作成する」ことを意味します。これをよりよく理解するには、これを見てください:

$array = array("my", "litte", "array", 2);

$serialized_array = serialize($array); 
$unserialized_array = unserialize($serialized_array); 

var_dump($serialized_array); // gives back a string, perfectly for db saving!
var_dump($unserialized_array); // gives back the array again
13
Sliq

PHPを使用して配列(またはオブジェクト)を文字列に変換するには、serialize():を呼び出します

$array = array( 1, 2, 3 );
$string = serialize( $array );
echo $string;

$ stringは配列の文字列バージョンを保持します。上記のコードの出力は次のとおりです:

a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}

文字列から配列に戻すには、unserialize():を使用します

// $array will contain ( 1, 2, 3 )
$array = unserialize( $string );
7
Amaresh Tiwari

PHP function serialize()を使用して配列を文字列に変換します。これらの文字列はMySQLデータベースに簡単に保存できます。unserialize()を使用して配列に変換できます必要に応じて再度。

6
Paul

RDBMsテーブルのコンマ区切りで複数値列に保存します。

1
Siva
<?php
$myArray = new array('1', '2');
$seralizedArray = serialize($myArray);
?>
1