mysqli_real_escape_string не вставляется в БД - PullRequest
0 голосов
/ 04 марта 2019

Я предлагаю следующий вопрос ... Я должен убедиться, что следующий запрос также принимает значения с кавычками внутри .. Я пытался использовать mysqli_real_escape_string, но он не работал .. Я прилагаю свои попытки ..

1 ° Поставить функцию во время поста

        $idCantiere = $_POST["idCantiere"];
        $nomeCantiere = mysqli_real_escape_string($_POST["nomeCantiere"]);
        $sql = "INSERT INTO Cantiere( 
        idCantiere,
        nomeCantiere)
        VALUES(
       '$idCantiere',
       '$nomeCantiere')";
        if (mysqli_query($mysqli, $sql)) 
        {
        echo "<script type='text/javascript'>alert('Cantiere Inserto'); 
        </script>";
        } else
        {
         echo "Error: " . $sql . "" . mysqli_error($mysqli);
        }

2 ° Поставить функцию во время запроса

 $idCantiere = $_POST["idCantiere"];
        $nomeCantiere = $_POST["nomeCantiere"];
        $sql = "INSERT INTO Cantiere( 
        idCantiere,
        nomeCantiere)
        VALUES(
       '$idCantiere',
       mysqli_real_escape_string('$nomeCantiere'))";
        if (mysqli_query($mysqli, $sql)) 
        {
        echo "<script type='text/javascript'>alert('Cantiere Inserto'); 
        </script>";
        } else
        {
         echo "Error: " . $sql . "" . mysqli_error($mysqli);
        }

Как решить проблему?

Ответы [ 5 ]

0 голосов
/ 04 марта 2019

Вы неправильно передали параметры в функцию mysqli_real_escape_string () перед вставкой записи, вы должны поместить строку подключения, с которой вы обращаетесь к БД.

$connection=mysqli_connect("localhost","USER","PASSWORD","DB");
$nomeCantiere= mysqli_real_escape_string($connection, $_POST['nomeCantiere']); 

ваша вторая попытка неверна, повторно использует мою строку кодаво первых .. во время поста

0 голосов
/ 04 марта 2019

Вы можете попробовать заменить кавычку на php

$nomeCantiere = $_POST["nomeCantiere"];
str_replace("'", "''", $nomeCantiere );

, если вместо двух mysql вставить 2 кавычки (''), это значение будет помещено в таблицу только с 1 кавычкой

0 голосов
/ 04 марта 2019

Вы должны передать переменную соединения в качестве первого параметра, например:

$con=mysqli_connect("localhost","my_user","my_password","my_db");
$age = mysqli_real_escape_string($con, $_POST['age']);

Для получения более подробной информации обратитесь к документации.http://php.net/manual/en/mysqli.real-escape-string.php

0 голосов
/ 04 марта 2019

Вам не хватает одного параметра в функции mysqli_real_escape_string($con,$sql);

0 голосов
/ 04 марта 2019

Удалите 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 невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...