mysqli_real_escape_string неправильно экранирует

213
02 марта 2018, 14:36
INSERT INTO reviews
(userName, email, phone, review_text,ip,browser)
VALUES('$userName','$email','$phone','$review_text','$userData[ip]','$userData[browser]')

вот строка которую передаю в real escape string

в БД не записывается. Запрос работает если из него \ убирать, после обработки real escape string.

Answer 1

Так делать не нужно, нужно каждую переменную оборачивать в функцию отдельно, а так-же, желательно обрамлять поля в тильду `

$userName = mysqli_real_escape_string($userName);
$email = mysqli_real_escape_string($email);
$phone = mysqli_real_escape_string($phone);
$review_text = mysqli_real_escape_string($review_text);
$ip = mysqli_real_escape_string($userData['ip']);
$browser = mysqli_real_escape_string($userData['browser']);
$sql = "INSERT INTO `reviews` (`userName`, `email`, `phone`, `review_text`,`ip`,`browser`)
VALUES('" . $userName . "','" . $email . "','" . $phone . "','" . $review_text . "','" . $ip . "','" . $browser . "')";

А вообще, конечно - лучше использовать prepared- подготавливаемые запросы:

$stmt = $stmt->prepare("INSERT INTO `reviews` (`userName`, `email`, `phone`, `review_text`,`ip`,`browser`) VALUES(?,?,?,?,?,?)");
$stmt->bindParam(1, $userName);
$stmt->bindParam(2, $email);
$stmt->bindParam(3, $phone);
$stmt->bindParam(4, $review_text);
$stmt->bindParam(5, $userData['ip']);
$stmt->bindParam(6, $userData['browser']);
$stmt->execute();

В данном случае mysqli_real_escape_string делать не нужно, так-как - это делается внутри движка.

READ ALSO
Ошибка при использовании транзакций

Ошибка при использовании транзакций

Необходимо очистить данные в двух связанных таблицах

271
Не могу подключиться ко второй базе данных Laravel

Не могу подключиться ко второй базе данных Laravel

Для хранения данных о пользователях и паролях, а также для хранения другой информации, создал подключение mysqlМне необходимо выгрузить данные...

234
Не получается настроить кодировку в MySQL

Не получается настроить кодировку в MySQL

Я передаю JsonObject, состоящий из объектов типа String, из android-приложения на сервер через POST-запрос и сохраняю переменные в MySQL c помощью JDBCЕсли в переменных...

174