如何在一列中将多个数据插入数据库

时间:2018-04-20 05:21:04

标签: php mysql arrays

我想在一列中将我的数组数据插入数据库。

我在数据库中的专栏是id(auto increment)& datas

这是我尝试的,我得到错误。

我想要这样的数据

id(primary)(AI)(INT)           datas(varchar:255)
--------                       ----
       1                       3001182708
       2                       3001182713
       3                       3001183215

我尝试使用此答案https://stackoverflow.com/a/10054725/9661872

$rand_post = ["3001182708", "3001182713", "3001183215", "3001183558", "3001183753"]; 

$prep = array();
foreach($rand_post as $k => $v ) {
    $prep[':'.$k] = $v;
    $sth = $db->prepare("INSERT INTO tes (`datas`) VALUES (" . implode(', ',array_keys($prep)) . ")");
    $res = $sth->execute($prep);
}
  

致命错误:未捕获PDOException:SQLSTATE [21S01]:插入值列表   列列表不匹配:1136列数与值不匹配   计数在C中的第1行:\ xampp \ htdocs \ savelink \ index.php:23堆栈跟踪:

     

0 C:\ xampp \ htdocs \ savelink \ index.php(23):PDOStatement->执行(数组)#1 {main}抛出

     第23行的

C:\ xampp \ htdocs \ savelink \ index.php

1 个答案:

答案 0 :(得分:2)

问题是因为每次循环都会增加preps数组的大小,所以第二次尝试在查询中只指定了1列时插入2个值。

我认为这就是你想要做的。基本上它形成了整个preps数组,然后从中构建语句并执行它。

$rand_post = ["3001182708", "3001182713", "3001183215", "3001183558", "3001183753"]; 

$prep = array();
foreach($rand_post as $k => $v ) {
    $prep[':'.$k] = $v;
}
print_r($prep);
$sth = $db->prepare("INSERT INTO tes (`datas`) VALUES (" . implode('), (',array_keys($prep)) . ")");
$res = $sth->execute($prep);

如果你看看$ sth和$ prep结束,你得到

INSERT INTO tes (`datas`) VALUES (:0), (:1), (:2), (:3), (:4)
Array
(
    [:0] => 3001182708
    [:1] => 3001182713
    [:2] => 3001183215
    [:3] => 3001183558
    [:4] => 3001183753
)