Могу ли я сделать PDO подготовить операторы с массивом и циклом foreach

0

Поэтому я начал читать о 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-> подготовить ("INSERT INTO $ tabla (col, col2, col3) VALUES (: col,: col2,: col3");

А потом привяжите параметры отдельно?

Заранее спасибо!

Теги:
security
prepared-statement
pdo

1 ответ

2
Лучший ответ

U не нужно связывать вещи, u может направить прямой массив на функцию выполнения pdo (которая делает это привязку для u)

мой массив следующий ["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);

btw u должен использовать классы, а это вместо этих глобальных вещей

  • 0
    Спасибо! Кроме того, почему лучше использовать классы вместо этого?
  • 1
    Лучше читать и использовать функции, все еще находящиеся в классах, но они более организованы, вы делаете это соединение pdo один раз при создании класса, и вы можете использовать его из каждой функции, здесь мой класс pdo, может быть, вы понимаете, что я имею в виду github .com / rautex / CCRM / блоб / ведущий / PDO_Class.php
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню