mysqli_real_escape_string, похоже, не работает - PullRequest
0 голосов
/ 30 июня 2018

Я новичок в PHP. Я пытаюсь вставить значение переменной в таблицу MariaDB и пытался использовать mysqli_real_escape_string для экранирования '$ value'. Я получил идею от здесь . Он вставил пустую строку в таблицу (я добавил ссылку на соединение с базой данных).

Итак, я скопировал и вставил следующий код из PHP Manual , он все еще не работал. Вывод, который я получил, был только с кодом ошибки: Ошибка: 42000. Чего мне не хватает?

Я использую Virtualbox, ОС: CentOS7

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

mysqli_query($link, "CREATE TEMPORARY TABLE myCity LIKE City");

$city = "'s Hertogenbosch";

/* this query will fail, cause we didn't escape $city */
if (!mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("Error: %s\n", mysqli_sqlstate($link));
}

$city = mysqli_real_escape_string($link, $city);

/* this query with escaped $city will work */
if (mysqli_query($link, "INSERT into myCity (Name) VALUES ('$city')")) {
    printf("%d Row inserted.\n", mysqli_affected_rows($link));
}

mysqli_close($link);
?>

Обновление: Спасибо за быстрый ответ! Я попробовал код @ Pilan, но не смог вставить строку. Я создал таблицу в базе данных под названием «Город». Я проверил, было ли в коде соединение с базой данных, и оно действительно вернуло «Подключено». Вот обновленный код:

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

else {

    echo "Connected";

$city = "'s Hertogenbosch";    

// Connect to db, returns mysqli-connection
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

// Prepare, "?" for placeholders, returns mysqli-statement
$stmt = $mysqli->prepare("INSERT INTO City (Name) VALUES (?)");

// Bin param to statement, with type "s" for string
$stmt->bind_param("s", $city);

//Execute
/* this query with escaped $city will work */
if ($stmt->execute()) {
    printf("%d Row inserted.\n", mysqli_affected_rows($link));
}

}
mysqli_close($link);
?>

Обновление : Спасибо, ребята, Код сработал, Он вставил в таблицу, но «Строка вставлена» не появилась: оказывается, я забыл извлечь точку с запятой из ' execute () ' внутри , если условный оператор.

1 Ответ

0 голосов
/ 30 июня 2018

Вот вам пример подготовленного оператора :

$city = "'s Hertogenbosch";    

// Connect to db, returns mysqli-connection
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

// Prepare, "?" for placeholders, returns mysqli-statement
$stmt = $mysqli->prepare("INSERT INTO myCity (Name) VALUES (?)");

// Bin param to statement, with type "s" for string
$stmt->bind_param("s", $city);

// Well execute :D
$stmt->execute();

Подробнее см. Здесь: подготовить , связать

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