我可以用数组和 foreach 循环做 PDO prepare 语句吗

Can I do PDO prepare statements with array and foreach loop

所以我开始阅读 PDO 和 PDO statemnts 来更新我的代码并提高它的安全性,但我真的不知道这是否可以或是否可以进行注入。我还在制作数组之前清理数据。我创建了这个函数 o 添加给定名称 table 的数据和一个包含列名称和值的数组,如下所示

$tabla = 'tabla'
$datos = array(
        'id' => 'NULL',
        'id_usuario' => "'{$usuario['id']}'",
        'id_tipo' => "'{$tipo}'",
        'id_estado' => "'{$estado}'",
        'id_visibilidad' => "'{$visibilidad}'",
        'titulo' => "'{$titulo}'",
        'contenido' => "'{$contenido}'",
        'fecha' => 'CURRENT_TIMESTAMP'
      );

function pdo_agregar($tabla, $datos) {
  global $pdo;
  $columnas = implode(', ', array_keys($datos));
  $valores = implode(', ', array_values($datos));
  $sentencia = $pdo->prepare("INSERT INTO $tabla ($columnas) VALUES ($valores)");
  foreach($datos as $indice => $valor) {
    $sentencia->bindParam(':'.$indice, $valor);
  }
  if($sentencia->execute()) {
    return true;
  } else {
    return false;
  }
  $sentencia->close();
  $pdo->close();
}

这样可以吗? o 我是否必须做出类似

的陈述

$sentencia = $pdo->prepare("INSERT INTO $tabla (col, col2, col3) VALUES (:col, :col2, :col3");

然后单独绑定参数?

提前致谢!

你不需要这些绑定的东西,你可以直接把一个数组扔给 PDO 的执行函数(它为你做这个绑定)。

我的数组如下 ["data" => "mydata", "data2" = "mysecond"] 所以我会生成如下查询:

INSERT INTO `Tab`(`data`, `data2`) VALUES (:data, :data2)

代码为:

        foreach($data as $key=>$val){
            $keys[] = $key;
            $vals[] = ":".$key;
        }
        $keys = "`".implode("`,`", $keys)."`";
        $vals = implode(",", $vals);
        $sql = "INSERT INTO `".$tab."`(".$keys.") VALUES (".$vals.")";
        $prep_insert = $this->pdo->prepare($sql);
        $prep_insert->execute($data);

顺便说一句,你应该使用 类 和这个,而不是这个全局的东西。