Преобразование кода mysql_escape_string в код mysqli_escape_string

#mysql #mysqli

#php #mysql #mysqli

Вопрос:

Я новичок в php и программировании для mysql. Я обновляю php-код, в котором использовался устаревший mysql_ код mysqli_ . Я не могу правильно преобразовать формат для этой функции mysqli_ . Этот код находится в functions.php код, который включен в большинство других php-кодов.

 function tep_db_input($string) {
 return mysql_escape_string($string);
}
  

Я попытался закодировать следующим образом:

 function tep_db_input($string) {
 return mysqli_escape_string($con, $string);
}
  

$con это мое подключение к базе данных. Ошибка, которую я получаю:

Предупреждение: mysqli_escape_string() ожидает ровно 2 параметра, 1 из которых указан в /home4/reinvest/public_html/members/includes/functions.php в строке 7

Поскольку у меня есть 2 параметра в mysqli_escape_string() , я не понимаю, в чем проблема?

Комментарии:

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

2. $con не определен в этом примере

3. Не делайте этого . Вместо этого используйте подготовленные операторы со значениями-заполнителями. Обтекание функций базы данных также добавляет уровень абстракции, где, учитывая риски неправильного экранирования значения, абсолютно необходима предельная ясность.

4. Прямо здесь. Что tep_db_input делает, можно только догадываться, основываясь на имени. Если вам необходимо выполнить экранирование вручную, что редко, если вы используете подготовленные операторы , тогда сделайте как можно более очевидным, что вы делаете. Каждый запрос с экранированием вручную является помехой, поэтому постарайтесь свести их к минимуму. Хорошая новость заключается в том, что большинство вещей можно сделать с помощью подготовленных операторов, так что в большинстве случаев это не проблема.

5. Откуда это взялось, это просто исторические факты. Если вы заинтересованы в его очистке, посмотрите, как работают подготовленные инструкции. Экранирование вручную очень сложно, если вы забудете, что есть проблемы, поэтому в большинстве современных систем баз данных есть заполнители типа ? или :name для фактического значения, и драйвер обрабатывает добавление данных за вас.

Ответ №1:

Во второй функции вам нужно было перейти $con в функцию, .

Ответ №2:

Если вы хотите очистить входную строку, я думаю, лучше использовать команду: mysqli_real_escape_string()Я думаю, этого достаточно, чтобы написать:

 $string = mysqli_real_escape_string($con,$string);
  

Комментарии:

1. Что вы подразумеваете под «я думаю»? Вы читали документацию о mysqli_escape_string и что это только псевдоним для mysqli_real_escape_string ?