Не могу использовать mysql_real_escape_string - PullRequest
1 голос
/ 12 октября 2010

Итак, я получаю это предупреждение при использовании 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.

Есть идеи?

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

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);
}

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

Ответы [ 2 ]

8 голосов
/ 12 октября 2010

Первое замечание: если вы получаете ошибку от 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()не имеет значения.

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

0 голосов
/ 12 октября 2010

строка mysql_real_escape_string (строка $ unescaped_string [, ресурс $ link_identifier])

Где $ unescaped_string - ваша строка, а $ link_identifier - ваш ресурс БД.

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

PHP.NET mysql_real_escape_string resource

...