我可以用数组和foreach循环执行PDO准备语句吗

时间:2018-07-07 22:17:05

标签: php mysql security pdo prepared-statement

因此,我合法地开始阅读有关PDO和PDO statemnts的信息,以更新我的代码并提供更高的安全性,但是我真的不知道这样做是否可行或是否可以进行注入。在制作阵列之前,我还清理了数据。我做了这个功能o在给定名称表的情况下添加数据,并添加具有列名称和值的数组

$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)   值(:col,:col2,:col3“);

然后分别绑定参数?

谢谢!

1 个答案:

答案 0 :(得分:2)

您不需要这种绑定的东西,您可以将数组直接抛出到pdo的执行函数(该函数为您执行绑定)

我的数组跟随[[data] =>“ mydata”,“ data2” =“ mysecond”],因此它将生成一个查询,例如“ INSERT INTO Tabdata,{{1 }})值(:data,:data2)“;

data2

顺便说一句,您应该使用此类,而不是全局类