我正在开发一个函数来对表单中的数组进行PDO更新:insert_arrays_values =>([0] =>(field_name => value,field_name2 => $ value2),[ 1] =>(field_name => value,field_name2 => $ value2))
我这样做是为了在我的表中进行批量插入(以及在另一个函数中更新)。
function sqlinsert($table, $insert_values_arrays){
$query = "INSERT INTO $table(";
foreach($insert_values_arrays[0] as $key => $val){
$query .= $key.',';
}
$query = rtrim($query, ',');
$query .= ") VALUES(";
foreach$insert_values_arrays[0] as $key => $val){
$query .= ':'.$key.','
}
$query = rtrim($query, ',');
$query .= " )";
$stm = $db->prepare($query);
foreach ($values_array as $column => &$value){
$stm->bindParam(':'.$column, $value);
}
foreach($insert_values_arrays as $values_array){
$stm->execute();
}
}
我的问题是,当我在insert_values_arrays [0]等的foreach中执行()时,我是否需要引用' $ value'直接在bindParam中,或者使用$ values_array执行foreach循环,因为我设置了唯一执行操作的值?
答案 0 :(得分:0)
好的,所以我通过避免使用bind参数并将数组直接传递给execute()来更简单地执行此操作,如下所示:
function sqlinsert($table, $insert_values_arrays){
$db = initializePDO();
$query = "INSERT INTO $table(";
foreach($insert_values_arrays[0] as $key => $val){
$query .= $key.',';
}
$query = rtrim($query, ',');
$query .= ") VALUES(";
foreach($insert_values_arrays[0] as $key => $val){
$query .= ':'.$key.',';
}
$query = rtrim($query, ',');
$query .= ")";
$stm = $db->prepare($query);
foreach($insert_values_arrays as $values_array){
$stm->execute($values_array);
}
//working
}
以这种方式避免bindParam是否有任何安全隐患?