使用pdo和php在mysql中批量插入的问题

时间:2014-07-11 12:35:07

标签: php mysql sql pdo

我正在尝试使用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]:参数号无效:绑定变量数与令牌数不匹配

注意:我已经简化/减少了查询参数和代码,以便更好地理解。

2 个答案:

答案 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;