PDO bindParam与多维数组

时间:2014-08-12 05:00:17

标签: pdo sqlbindparameter

我正在开发一个函数来对表单中的数组进行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循环,因为我设置了唯一执行操作的值?

1 个答案:

答案 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是否有任何安全隐患?