0

我正在开发一个函数来对以下形式的数组进行 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 中执行()时,我是否需要直接在 bindParam 中引用“$value”,还是像我一样使用 $values_array 执行 foreach 循环它为唯一的执行操作设置值?

4

1 回答 1

0

好的,所以我通过避免绑定参数并直接将数组传递给 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 是否有任何安全隐患?

于 2014-08-12T20:49:40.927 回答