Первое замечание: если вы получаете ошибку от mysql_real_escape_string()
, это потому, что вы вызываете функцию до того, как подключаетесь к базе данных.
Похоже, что вы подключаетесь к базе данных прямо передВы запускаете запрос.Поэтому все, что вы делаете перед вызовом функции mm_mysqlquery()
, не будет иметь подключения.
Для функции mysql_real_escape_string()
требуется прямое соединение с базой данных, поэтому она может выполнять правильное экранирование по отношению кнабор символов соединения.Поэтому вам нужно подключиться до того, как вы совершите побег.
В любом случае это лучше сделать, потому что, если вы делаете несколько запросов в течение одного запроса PHP, подключение требует меньше затрат один раз и использовать одно и то же соединение для всех ваших запросов.
Во-вторых, пожалуйста, не принимайте предложения по использованию addslashes()
- это не то же самое, что mysql_real_escape_string()
.Два не являются взаимозаменяемыми.Вы должны привыкнуть использовать mysql_real_escape_string()
.
В-третьих, ваша функция sani()
показывает общее неправильное представление.
function sani($string){
$string = strip_tags($string);
$string = htmlspecialchars($string);
$string = trim(rtrim(ltrim($string)));
$string = mysql_real_escape_string($string);
return $string;
}
Общее заблуждение состоит в том, что вам нужны все эти функции длясделать строку безопасной в операторе SQL.Вы неТолько mysql_real_escape_string()
необходимо.Все остальные функции в этом примере ничего не делают для защиты от внедрения SQL.
Эти функции полезны, если вы выводите строку в HTML-презентации и хотите снизить риск атак XSS, но затем mysql_real_escape_string()
не имеет значения.
Используйте каждый тип метода очистки в соответствующем контексте.