如何将数组插入一行?

Posted

技术标签:

【中文标题】如何将数组插入一行?【英文标题】:How can I insert an array into one row? 【发布时间】:2012-07-23 12:00:30 【问题描述】:

以下代码用于从表单插入数组,但它将每个值插入到它自己的行中。

<?php 
require_once('config.php'); 
require_once('open_db.php');
$palette=$_POST['colors_palette'];
while (list ($key,$val) = @each ($palette)) 

For ($i=0; $i<sizeof($palette);$i++) 
$query="INSERT INTO style_test1 (colors_palette) VALUES ('".$palette[$i]."')";
mysql_query($query) or die(mysql_error());

Echo "Record is inserted";
?>

<form method="post" action="insert_array.php" >
<input type="checkbox" name="colors_palette[]" value="jewel" />                
<input type="checkbox" name="colors_palette[]" value="bright" />                     
<input type="checkbox" name="colors_palette[]" value="soft" /> 
<input type="checkbox" name="colors_palette[]" value="earth" />
<input type="submit" name="Submit" value="Submit" />
</form>

【问题讨论】:

【参考方案1】:

作为字符串插入:

<?php 
 require_once('config.php'); 
 require_once('open_db.php');

 $palette=$_POST['colors_palette'];

 $query="INSERT INTO style_test1 (colors_palette) VALUES ('". serialize($palette) ."')";
 mysql_query($query) or die(mysql_error());

 echo "Record is inserted";
?>

然后您可以unserialize 将数据作为数组或对象取回。

不过,更好的方法是插入 JSON 格式 字符串。

$query="INSERT INTO style_test1 (colors_palette) VALUES ('". json_encode($palette). "')";

然后您可以使用json_decode 将其解码回数组。

内爆:

$pal   = implode(',', $palette);
$query = "INSERT INTO style_test1 (colors_palette) VALUES ('".$pal."')";

【讨论】:

这样去规范化数据是没有用的。最重要的是,问题是“它如何将每个值插入到它自己的行中”。 提问者已经知道如何将每个插入到自己的行中。他们想将整个数组插入一行。 @Patrick 成功了 :-D 它出现了意外的格式 - json_encode 导致 ["neutral","jewel","bright"]。我该怎么做才能防止引号和 [] 被添加到数据库中? 请参阅我更新的答案中的 implode。如果它解决了您的问题,请确保将其标记为 最佳答案【参考方案2】:

可以使用PHP函数

serialize($myArray);

此函数将数组转换为字符串。所以你可以在一个行字段中插入。

并在字符串上使用反序列化来获取一个数组。

你也可以通过内爆数组来得到一个字符串

$string = implode(',',$myArray);

【讨论】:

explode 用于从字符串创建数组,而不是相反 @João Mosmann 这行得通 :-D 这会很有帮助,因为我的一些代码需要一个字符串 :-)【参考方案3】:

要将数组转换为逗号分隔的变量,请使用 PHP 中的 implode 函数:

$query="INSERT INTO style_test1 (colors_palette) VALUES ('".implode(',',$palette)."')";

编辑:试试这个代码:

<?php 
 require_once('config.php'); 
 require_once('open_db.php');

 $palette=$_POST['colors_palette'];

 $query="INSERT INTO style_test1 (colors_palette) VALUES ('".implode(',',$palette)."')";
 mysql_query($query) or die(mysql_error());

 echo "Record is inserted";
?>

【讨论】:

不幸的是,这不起作用。没有插入任何内容,它给了我错误消息:Warning: implode() [function.implode]: Invalid arguments pass in... 您的意思是我应该重新输入单引号吗?如果是这样,当我尝试进行轻微更改时 - 它插入了一个空行,我收到 3 条错误消息:“未定义变量:i”、“未定义索引”和“implode() [function.implode]:传递的参数无效" 如果有单个 dim 数组,您可以尝试将其作为 implode(',',$palette) 并删除循环。 谢谢 :-) Patrick 和 @João Mosmann 刚刚向我展示了如何做到这一点 :-)

以上是关于如何将数组插入一行?的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中将动态数组插入数据库?

delphi中stringgrid如何动态增加一行。如何删除一行。

Swift 4 - 将新行从数组插入到只有一个静态行的部分

Laravel - 将多个数组作为新行插入?

C语言数组的删除,插入

将两个数组插入一个mysql行