我可以用array和foreach循环来做pdo prepare语句吗

vx6bjr1n  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(290)

所以我开始阅读pdo和pdo声明来更新我的代码并给它更多的安全性,但我真的不知道这是好的还是有可能进行注入。在创建数组之前,我还清理了数据。我使用这个函数来添加给定名称的数据表和一个列名称和值如下的数组

$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(“插入$tabla(col,col2,col3)值(:col,:col2,:col3”);
然后单独绑定参数?
提前谢谢!

uhry853o

uhry853o1#

您不需要这些绑定东西,可以直接向pdo的execute函数抛出一个数组(它为您进行绑定)。
我的阵法如下 ["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);

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

相关问题