良いはありません 配列を単一のフィールドに格納する方法。
リレーショナルデータを調べて、スキーマに適切な変更を加える必要があります。このアプローチのリファレンスについては、以下の例を参照してください。
必須の場合 配列を単一のフィールドに保存してから、 serialize()
およびunserialize()
関数がそのトリックを行います。ただし、実際のコンテンツに対してクエリを実行することはできません。
シリアル化機能の代わりに、 json_encode()
およびjson_decode()
。
次の配列を検討してください
$a = array(
1 => array(
'a' => 1,
'b' => 2,
'c' => 3
),
2 => array(
'a' => 1,
'b' => 2,
'c' => 3
),
);
データベースに保存するには、次のようなテーブルを作成する必要があります
$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
$r = mysql_query(
'DROP TABLE IF EXISTS test');
$r = mysql_query(
'CREATE TABLE test (
id INTEGER UNSIGNED NOT NULL,
a INTEGER UNSIGNED NOT NULL,
b INTEGER UNSIGNED NOT NULL,
c INTEGER UNSIGNED NOT NULL,
PRIMARY KEY (id)
)');
レコードを操作するには、次のようなクエリを実行できます(もちろん、これは例です。注意してください)
function getTest() {
$ret = array();
$c = connect();
$query = 'SELECT * FROM test';
$r = mysql_query($query,$c);
while ($o = mysql_fetch_array($r,MYSQL_ASSOC)) {
$ret[array_shift($o)] = $o;
}
mysql_close($c);
return $ret;
}
function putTest($t) {
$c = connect();
foreach ($t as $k => $v) {
$query = "INSERT INTO test (id,".
implode(',',array_keys($v)).
") VALUES ($k,".
implode(',',$v).
")";
$r = mysql_query($query,$c);
}
mysql_close($c);
}
putTest($a);
$b = getTest();
connect()
関数はmysql接続リソースを返します
function connect() {
$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
return $c;
}