如何使用PHP从MySQL数据库中插入和检索数组值?

3

我有一个包含值为[0, 1, 2]的PHP数组"$shared"(这只是一个示例)。

我想要将此数组插入到我的MySQL数据库中并检索出来,但是目前无法正常工作。

目前我正在使用以下代码进行插入:

mysqli_query($dbhandle, "INSERT INTO table (arraytest) VALUES ('$shared')");

在上述代码之后,在MySQL数据库中,“table”列“arraytest”的值是“Array”,而不是[0, 1, 2]或任何其他数组应该在MySQL数据库中的样子。

将数组插入数据库后,我希望能够检索它,目前正在使用以下代码:

$id='2';

$result = mysqli_query($dbhandle, "SELECT arraytest FROM table");

while ($row = mysqli_fetch_array($result)) {

$shared=$row{'arraytest'};

if(in_array($id, $shared)){

    echo 'Value is in the array. Success!';

}

}

我在线上做了一些研究,但没有找到具体的方法。
我想要将一个PHP数组()插入到数据表中的一个单元格中,然后从数据库中检索该数组,并检查之前插入到数据库中的数组中是否存在某个值。
注:我不是想要将整个列作为数组从数据库中检索出来。当我在谷歌上搜索答案时,这就是我发现的,而这不是我想要做的。

一般不建议这样做,你应该将数组的每个值分别存储。但如果你一定要使用serialise()函数。 - user557846
5个回答

5
我必须质疑为什么你想要这样做,但最简单的答案是将数组序列化。
"INSERT INTO table (arraytest) VALUES ('" . serialize($shared) . "')"

当你从数据库中检索数据时,可以使用unserialize函数。


为了防止注入或错误,应该正确地对查询进行参数化。


我想使用数组,因为该数组最多可以包含30个值,而我不想在我的表中有30列。 - edwardtyl
@edwardtyl 谷歌搜索“预处理语句”。不要使用30个列,而是将其拆分为另一个表,该表连接到此表并创建30行。 - Explosion Pills
@ExplosionPills,这是比仅仅序列化更好的选择吗?因为序列化似乎更容易。 - edwardtyl
@edwardtyl 我认为这可能是可以做到的,但这取决于数据的使用方式。将其存储在数组中会使其非常难以与MySQL本身一起使用和操作;如果您想对此数组的值进行任何操作,则几乎必须使用PHP。 - Explosion Pills
@ExplosionPills 好的,那我会使用序列化,因为我只打算使用php,并且这是一个聊天程序,在其中数组包含每个可以看到帖子的人的id(这在同一行的单独列中)。谢谢! - edwardtyl

1
使用json_encode()将您的数组转换为JSON字符串(使用json_decode()将其转换回来)。这将为您提供更具平台独立性,即未来可靠的数据表示形式。此外,这将导致存储在数据库中的字符稍微少一些。
我遇到了一些情况,其中数据通常以某种方式表示,通常是记录的“附加”信息,由于记录逐个更改,因此很难将其压缩到模式中。这是一种实用的解决方案,但不是很好的解决方案。特别是,如果不将整个表读入内存,则很难查询存储在此数组中的信息。

0

你不能将 PHP 数组插入到数据库中。你的问题在于:

$arr = new Array(1,2,3);
echo $arr; // prints "Array"

在 PHP 中,如果在字符串上下文中使用数组,你只会得到单词 "Array",而不是数组的内容。你需要在数组上运行循环来插入每个单独的值,例如:
foreach($arr as $val) {
   INSERT INTO yourtable VALUES ($val)
}

0

虽然不建议像这样存储数组,但最好的方法是使用序列化和反序列化(从数据库获取数据)。然而,我认为您应该使用foreach循环将每个值放在单独的单元格中...


0
如何从数据库中检索数组数据?我使用PHP implode函数插入了数组数据。
$val=implode(',',$val); 

我已经被插入到MySQL数据库中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接