#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
?