将PHP数组保存到MySQL?
将数据数组保存到单个 mysql 字段的好方法是什么?
另外,一旦我在mysql表中查询该数组,将其恢复为数组形式的好方法是什么?
序列化和非序列化是答案吗?
将数据数组保存到单个 mysql 字段的好方法是什么?
另外,一旦我在mysql表中查询该数组,将其恢复为数组形式的好方法是什么?
序列化和非序列化是答案吗?
没有将数组存储到单个字段中的好方法。
您需要检查关系数据并对架构进行适当的更改。有关此方法的参考,请参阅下面的示例。
如果必须将数组保存到单个字段中,则 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();
该函数返回 mysql 连接资源connect()
function connect() {
$c = mysql_connect($server, $username, $password);
mysql_select_db('test');
return $c;
}
通常,是的,序列化和非序列化是要走的路。
但是,如果您的数据很简单,则保存为逗号分隔的字符串可能会更好地用于存储空间。例如,如果您知道您的数组只是一个数字列表,那么您应该使用内爆/爆炸。这是 和 之间的区别。1,2,3
a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}
如果不是,则序列化和取消序列化所有事例的工作。