Intereting Posts

Невозможно использовать mysql_real_escape_string

Итак, я получаю это предупреждение при использовании mysql_real_escape_string

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'username'@'localhost' (using password: NO) in /home/path/php/functions.php on line 11 

Остальная часть сайта работает нормально, подключается к БД и всем, но я получаю сообщение об ошибке при использовании этой функции.

Он отлично работает на моем сервере тестирования localhost.

Есть идеи?

Я использую вышеупомянутую функцию в своей собственной функции санобработки строки homebrew:

 function sani($string){ $string = strip_tags($string); $string = htmlspecialchars($string); $string = trim(rtrim(ltrim($string))); $string = mysql_real_escape_string($string); return $string; } 

И я использую эту функцию каждый раз, когда я делаю запросы …

 function mm_mysqlquery($query) { if (MM_DEBUG == true) { echo "Query: $query <br>"; mm_log("Query: $query"); } //print query if MM_DEBUG $link = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die ("mysql_error: " . mysql_error()); $db_selected = mysql_select_db(DB_NAME); return mysql_query($query, $link); } 

Спасибо заранее!

Первая точка. Если вы получаете сообщение об ошибке из mysql_real_escape_string() , это связано с тем, что вы вызываете эту функцию до того, как будете подключены к базе данных.

Похоже, вы подключаетесь к базе данных непосредственно перед запуском запроса. Итак, все, что вы делаете до вызова функции mm_mysqlquery() , не будет иметь соединения.

Для функции mysql_real_escape_string() требуется 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() только mysql_real_escape_string() . Все остальные функции в этом примере не защищают от SQL-инъекций.

Эти функции полезны, если вы выводите строку в HTML-презентации и хотите уменьшить риск атак XSS, но тогда mysql_real_escape_string() имеет значения.

Используйте каждый тип метода дезинфекции в соответствующем контексте.

string mysql_real_escape_string (строка $ unescaped_string [, resource $ link_identifier])

Где $ unescaped_string – ваша строка, а $ link_identifier – ваш ресурс db.

Соединение MySQL. Если идентификатор ссылки не указан, предполагается последняя ссылка, открытая mysql_connect (). Если такой ссылки не обнаружено, она попытается создать такую, как если бы mysql_connect () был вызван без аргументов. Если соединение не установлено или не установлено, генерируется ошибка уровня E_WARNING.

Ресурс mysql_real_escape_string PHP.NET