Удалите mysqli_real_escape_string()
и просто используйте подготовленные операторы, которые просты и предотвращают SQL-инъекции.
<?php
$idCantiere = isset($_POST['idCantiere']) ? $_POST['idCantiere'] : null;
$nomeCantiere = isset($_POST['nomeCantiere']) ? $_POST['nomeCantiere'] : null;
$sql = $mysqli->prepare("INSERT INTO Cantiere (idCantiere,nomeCantiere) VALUES(?.?)");
$sql->bind_param("is",$idCantiere,$nomeCantiere);
if($sql->execute()){
//success message
}else{
//return error
}
?>
Подготовленный оператор - это функция, используемая для многократного выполнения одних и тех же (или похожих) операторов SQL с высокимэффективность.
Подготовленные операторы в основном работают следующим образом:
Подготовка: шаблон оператора SQL создается и отправляется в базу данных.Определенные значения остаются неуказанными, они называются параметрами (помечены «?»).Пример: INSERT INTO MyGhest VALUES (?,?,?) База данных анализирует, компилирует и выполняет оптимизацию запросов для шаблона оператора SQL и сохраняет результат, не выполняя его. Выполнение: позднее приложение связывает значения спараметры, и база данных выполняет оператор.Приложение может выполнять оператор столько раз, сколько ему нужно, с разными значениями. По сравнению с непосредственным выполнением операторов SQL подготовленные операторы имеют три основных преимущества:
Подготовленные операторы сокращают время синтаксического анализа, поскольку подготовка запроса выполняется только один раз.(хотя оператор выполняется несколько раз) Связанные параметры минимизируют полосу пропускания на сервер, так как вам нужно каждый раз отправлять только параметры, а не весь запрос. Подготовленные операторы очень полезны для SQL-инъекций, поскольку значения параметров, которые передаются позже с использованиемдругой протокол, не нужно правильно экранировать.Если исходный шаблон оператора не является производным от внешнего ввода, внедрение SQL невозможно.