多个PDO插入,单个语句不起作用

时间:2014-07-11 16:55:15

标签: php mysql pdo

我正在尝试遍历$ vars_array [' selected_ids']数组并插入selected_id和page_id。它正在插入3条记录(如预期的那样),但每条记录的selected_id为7 ..即插入的最后一个选定值。

$vars_array=array();
$vars_array['page_id']=10;
$vars_array['selected_ids']=array(2,3,7);

$sql = "INSERT INTO template_values ( page_id, selected_id) VALUES";
$sqlPart = array_fill(0, count($vars_array['selected']), "(?, ?)");
$sql .=  implode(",",$sqlPart);
$stmt=$this->database->prepare($sql);

$i = 1;
foreach($vars_array['selected_ids'] as $selected_id) {
    $stmt -> bindParam($i++, $vars_array['page_id']);
    $stmt -> bindParam($i++, $selected_id);
}
$stmt -> execute();

有什么想法吗?关于J

2 个答案:

答案 0 :(得分:1)

原因是因为您使用的是bindParam,而不是bindValuebindParam存储对您正在绑定的变量的引用,并在执行时使用该变量的值。该值与foreach中的最后一次迭代相同。

使用bindValue(你通常应该这样做,因为你希望它使用值而不是引用 - 导致像这样的微妙错误)或者将数组发送到{{1}直接(我通常在生成大占位符查询时更喜欢这个,因为在使用bindValue时我更喜欢命名占位符。)

答案 1 :(得分:0)

替代方法:

    $i = 0;
    $new_array=array();
    foreach($vars_array['selected_ids'] as $selected_id) {
        $new_array[$i++]= $vars_array['page_id'];
        $new_array[$i++]= $selected_id;     
    }
    $stmt -> execute($new_array);