我正在尝试遍历$ 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
答案 0 :(得分:1)
原因是因为您使用的是bindParam
,而不是bindValue
。 bindParam
存储对您正在绑定的变量的引用,并在执行时使用该变量的值。该值与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);