Поэтому я начал читать о 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");
А потом привяжите параметры отдельно?
Заранее спасибо!
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 должен использовать классы, а это вместо этих глобальных вещей