如何保存PHP数组到MySQL?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (91)

如何保存PHP数组到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();

connect()函数返回一个mysql连接资源

function connect() {
    $c = mysql_connect($server, $username, $password);
    mysql_select_db('test');
    return $c;
}
用户回答回答于

,如果你的数据很简单,将其保存为逗号分隔的字符串可能会更适合存储空间。例如,如果你知道你的数组只是一个数字列表,那么您应该使用implode/explode。这是两者的区别1,2,3a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}...

如果没有,则对所有情况下的工作进行序列化和取消序列化。

扫码关注云+社区

领取腾讯云代金券