Как безопасно обновлять и извлекать строки с помощью подготовленного оператора mysqli?

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

Я полагал, что использование подготовленного оператора с параметрами как для оператора SQL Update, так и для операторов Select автоматически экранирует и отменяет экранирование специальных символов соответственно. Похоже, этого не происходит. В подготовленном заявлении все еще есть апостроф из-за неправильного формата утверждения из-за апострофа.

Я работаю над этим, используя mysqli_real_escape_string в своих строках перед обновлением, но когда я получаю строки с помощью другого подготовленного оператора (выберите с одним параметром), экранированный апостроф отображается в тексте на странице html (например: / 'hello /' вместо ' Привет' ).

Поэтому я использую полосы-слеши. Это работает, но я думал, что подготовленные операторы mysqli сделали это за вас. Любые идеи?

Обновлять:

$mysqli = new mysqli($servername, $username, $password, $dbname);   
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
} 
$sql = "UPDATE table SET mycol= ? WHERE myparam= ?";
$stmt = $mysqli->prepare($sql); 
$stmt->bind_param('ss', $mycol, $myparam);
if (!$stmt->execute()) { 
       echo "Error updating record: " . $stmt->error;                                  
}

Получать:

$mysqli = new mysqli($servername, $username, $password, $dbname);                           

if ($mysqli->connect_error)
{
    die("$mysqli->connect_errno: $mysqli->connect_error");
}

$sql= "Select * From table Where myvar= ?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("s", $myparam);
$stmt->execute();
$stmt_result = $stmt->get_result();

if ($stmt_result->num_rows>0) {
    $row = $stmt_result->fetch_assoc();    }

Я не использовал Mysqli примерно 5 лет, но я уверен, что PDO делает этот This works but I thought that mysqli prepared statements did this for you, какую именно ошибку вы получаете. Я знаю, что если вы попытаетесь присоединиться к текстовому файлу с ', у вас возникнут проблемы, но это не вина PDO. Это единственная проблема, которую я видел с цитатами.

ArtisticPhoenix 30.10.2018 06:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
28
2

Ответы 2

Используйте функцию mysqli_real_escape_string, чтобы избежать угроз безопасности.

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

Solar Serpent 30.10.2018 06:39

Извините, что беспокою людей!

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

Проблема, с которой я столкнулся впоследствии, заключалась в том, что я дважды экранировал текст. Это исправлено.

Спасибо всем кто ответил!

Другие вопросы по теме