我正在尝试使用pdo在mysql中插入批量记录但由于某种原因我无法构建查询。
我的POST看起来像这样
Array
(
[ques_1] => dsadasd
[ques_2] => 5
[ques_3] => dasdsad
[ques_4] => 23/7/2014
[savecontinue] => Save & Continue
)
我想要的数组应该是这样的
Array
(
[quid] => 1
[answer] => dasdsad
)
Array
(
[quid] => 2
[answer] => on
)
Array
(
[quid] => 3
[answer] => dasdsad
)
Array
(
[quid] => 4
[answer] => 23/7/2014
)
我的代码看起来像这样
foreach($_POST as $k=>$v)
{
if($k != 'savecontinue' and $k != 'skipsave')
{
list(,$qid) = explode("_",$k);
$insertData[$qid] = $v;
}
}
$sql = "INSERT INTO answers (quid, answer)
VALUES (:quid, :answer)";
$query = $this->db->prepare($sql);
$query->execute($insertData);
错误是 PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:绑定变量数与令牌数不匹配
注意:我已经简化/减少了查询参数和代码,以便更好地理解。
答案 0 :(得分:2)
在我看来,你会更喜欢这样的事情。
您还向INSERT传递了许多参数,您传递的数组必须只包含查询所需的值,并使用'命名:'在前面。
// prepare the query for multiple use later
$sql = "INSERT INTO answers (userid, catid, quid, qstep, answer)
VALUES (:userid, :catid, :quid, :qstep, :answer)";
$query = $this->db->prepare($sql);
// create an array of inputs
for ($x=1; $x < 5; $x++ ) {
$insertData[] = array( ':userid' => 1,
':catid' => $_POST['catid'],
':quid' => $x,
':qstep' => 1,
':answer' => $_POST['ques_'.$x]);
}
// loop over the array of inputs
foreach ( $insertData as $data ) {
$query->execute($data);
}
答案 1 :(得分:1)
更改以下内容:
$insertData = array("$qid"=>"$v");
为:
$insertData[$qid] = $v;