使用preg_split在数据库中存储数组

时间:2017-12-13 14:44:27

标签: php mysql preg-split

我有一个textarea,我可以输入尽可能多的项目,我想通过换行符分隔。

然后,在php文件中我有这个来获取值:

$colors = $_POST["colors"];

foreach ( preg_split ('/[\s*,\s*]*,+[\s*,\s*]*/', $colors) as $value)
{

    echo $value.'<br>';

}

正确传递项目与该代码一样,我可以在一行中看到所有项目。我试图将它存储在数据库中,但它只存储在一行中。

例如,如果我输入textarea:

Red
   Black
  Dark Black
Blue    

打印方式如下:

Red Black Dark Black Blue 

也就是说,它会删除开头和结尾处的所有空格,但不会删除中间的空格(这正是我想要的)。

我的问题在于我处理数组的方式。我想每行打印一个元素,因此能够在数据库中每行存储一种颜色。

有人可以帮忙吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

在您的示例中,$value是一个字符串。如果要将数据插入到数组中,则需要:

$myarray[]=$value;

你可以echo它首先放置的事实意味着它不是一个数组。所以在你的foreach中添加我在上面提供的代码行。之后,您可以在foreach之外使用print_r($myarray)并查看数组的结构。

但根据您的代码,您可以在foreach内执行查询并将值存储在数据库中。不需要阵列。

所以你可以这样:

第一种方式:

<?php
$colors = $_POST["colors"];

//declare your array
$myArray=array();

foreach ( preg_split ('/[\s*,\s*]*,+[\s*,\s*]*/', $colors) as $value)
{
    //insert data inside your array
    $myArray[]=$value;

}

//output of your new array
print_r($myArray);

或者更简单的第二种方式:

<?php
$colors = $_POST["colors"];

$servername = "my_server_name";
$username = "username";
$password = "password";
$dbname = "my_db_name";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);

foreach ( preg_split ('/[\s*,\s*]*,+[\s*,\s*]*/', $colors) as $value)
{

    //$value variable holds all the info you need so you just do the INSERT QUERY inside the foreach

    $stmt = $conn->prepare("INSERT INTO my_table (my_column) VALUES (?)");
    $stmt->bind_param("s", $value);
    $stmt->execute();



}

您只需在foreach内进行查询。确保使用准备好的陈述。