将一个数组值插入mysql insert语句

时间:2014-11-13 08:06:44

标签: php

人们将值输入表单并在表单的一个条目中输入多个值。

例如: 名称的一个条目  和爱好的多个条目。

我可以通过运行for循环进入数据库,但是对于每个不同的爱好,这将是同名的多个条目。

如何将“空格”中的一个名称和所有爱好输入到一个数据库字段“TWIG”中。我可以使用数组,但它显示为ARRAY,然后返回FOR循环。

for ($t=0; $t<=$_POST['tc']-1; $t++) { 
    echo "<BR> ts:".$_POST[$t]."<BR>"; 
    $ths[]=$_POST[$t];
}
print_r ($ths);

$statement = $link->prepare("INSERT INTO quest(cnos, dte, twig)
    VALUES(:q, :d, :t )");
$statement->execute(array(
    ":q" => htmlspecialchars ($_POST['iht']),
    ":d" => $_SERVER['REQUEST_TIME'],
    ":t"=> $ths
));

5 个答案:

答案 0 :(得分:4)

一种可能性是破坏你的爱好/将你的字符串合并为一个......

for ($t=0; $t<=$_POST['tc']-1; $t++) {
    $ths = $_POST[$t] . " "; //Concatinate string, do no use array!
}

//Cut off last character " " to avoid ugly space at the end:
$ths = substr($ths, 0, strlen($ths) - 1);

但是,如果您想要原子值,更清晰的解决方案是创建更清晰的数据库结构。

这是1:n关系(表A中的每个条目都与表B中的n个实例相关)。

以下示例可以很容易地适应您的架构:

Table User(id[PK], name, age);

Table User_Hobbies: (user_id, hobby_descr);

--

INSERT INTO User(2, "Chris", 19);

INSERT INTO USER_User_Hobbies(2, "videogames");
INSERT INTO USER_User_Hobbies(2, "music");


--

Example query:

SELECT u.name, u.age, GROUP_CONCAT(uh.hobby_descr) AS hobbies
FROM User u
LEFT JOIN User_Hobbies uh ON u.id = uh.user_id
WHERE u.id = 123 /*Where is optional, if you want to filter for a specific user*/
GROUP BY u.id;

Possible result:
| name  | age  | hobbies                      | 
 chris    18   videogames, music
 steve    22   computer, programming, php      

答案 1 :(得分:2)

使用implode功能,如下所示:

":t"=> implode(" ", $ths);

答案 2 :(得分:2)

我不确定,如果我理解你的问题是正确的,但是如果你想插入一个数组作为逗号分隔的字符串(或由任何分隔),为什么不使用php implode函数:{{3} }

例如:

$myHobbies = array("football", "basketball", "running");
$statement = $link->prepare("INSERT INTO quest(cnos, dte, twig)
    VALUES(:q, :d, :t )");
$statement->execute(array(
    ":q" => htmlspecialchars ($_POST['iht']),
    ":d" => $_SERVER['REQUEST_TIME'],
    ":t"=> implode(" ", $myHobbies)
));

我认为使用逗号或分号作为分隔符,优于空格,因为一些爱好可能包含两个单词(例如“pc gaming”)。

答案 3 :(得分:0)

我认为更好的解决方案是使用json_encode而不是内爆,因为它提供了更强大的结构。

":t" => json_encode($myHobbies)

答案 4 :(得分:0)

您可以使用join函数在数据库中的同一字段中存储多个值,它可能会起作用: -

   ":t"=>join(",", $ths);//if you want ,(coma) between two string 

         or 
   ":t"=>join(" ", $ths);//if you want space between two string