将数组存储到数据库中

时间:2011-12-10 15:36:56

标签: php mysql

我们如何在数据库中存储数组?

我正在做的是以下内容:

// $ data是一个数组

$v = base64_encode(json_encode($data));

$todo = 'INSERT INTO table (data) VALUES("' . $v . '")';
$sql = mysql_query($todo);

为什么我必须在将数组存储到数据库之前调用base64_encode?

4 个答案:

答案 0 :(得分:2)

你在做什么可能是错的。你做出的许多决定都不是必要的,也可能不合适。

首先,将“冻结”数组存储在数据库中通常是一个坏主意,因为除了将它们取回之外你不能对它们做任何事情(你不能修改它们或根据它们的内容进行查询)。 “修复”此问题的解决方案是面向数据库的,包括更改表架构。我不知道你要做什么,所以我不会详细介绍。

然后,如果你想在数据库中序列化数组(有合法的用例)(编辑: ,只打算通过PHP代码访问它们 - 正如非常正确指出!),你应该使用的唯一东西是serialize函数 - 而不是json_encode或其他任何东西。这就是函数存在的原因。当您从数据库中获取值时,请使用deserialize来恢复数组。

最后,在将变量注入SQL查询时,需要使用mysql_real_escape_string(您没有这样做)将其转义。

这样做会更好

$sql = sprintf('INSERT INTO table (data) VALUES(\'%s\')',
               mysql_real_escape_string(serialize($data)));
$result = mysql_query($sql); 

答案 1 :(得分:1)

不必调用base64_encode,但您必须使用mysql_real_escape_string转义该值。

答案 2 :(得分:1)

您无需调用base64_encode()。 json_encode()已经是一个字符串...当然,你只能使用$data中的UTF-8编码值。

这是存储数组的合法方法,但您可以将表视为数组并每行存储一个值。此外,如果您的数据内容不与分隔符相互干扰,您可以将数据存储为XML字符串,甚至是CSV / TSV。

最重要的是,它实际上取决于您所处的情况。从您提供的代码中,这将有效,但如果您希望它能够正常/更好地工作,那么肯定需要更多信息。

注意:在输入数据库之前清理数据!

答案 3 :(得分:0)

当然,您不会将数组存储在关系数据库中。

从数组中获取base64似乎是一个技巧,因此您可以在数据库中存储字符串。