Ошибка доступа при использовании mysql_real_escape_string ()

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

Warning: mysql_real_escape_string(): Access denied for user 

Теперь это обычно предполагает, что я не подключился к базе данных (он также указывает (используя пароль: НЕТ)).

Я был немного смущен этим, потому что, когда вы подключаетесь к базе данных, у меня есть предложение «die», поэтому, если он не сможет связаться, я расскажу об этом. Поэтому я протестировал эту теорию, выполнив простой запрос в той же функции, что и я пытался избежать данных, и это работает отлично.

Итак, почему на земле не будет работать метод escape или получить соединение с базой данных. Я заметил, что пользователь, на котором указывает ошибка, не является пользователем, которого я использую для доступа к базе данных, что-то вроде «www-data @ localhost». Может ли он попытаться войти в систему с другим пользователем, если да, то почему и как? Поскольку в другой области моего веб-сайта функция выхода работает очень хорошо, и я не делал ничего особенного, чтобы заставить ее работать, просто добавил код на мою веб-страницу.

Спасибо за помощь.

Существуют ли другие способы дезинфекции моего кода?

Хорошо, поэтому здесь мы идем, когда пользователь отправляет форму, я использую AJAX для сбора данных и помещаю их в obj для публикации (кодирование JSON) в первый скрипт PHP, который находится здесь:

http://codepad.org/kGPljN4I

Этот скрипт проверяет все данные, а затем вызывает функцию для добавления в базу данных

этот класс Mysql вызывается для удаления данных, а затем добавляет новую запись в базу данных, когда и экземпляр класса создается, он делает соединение с базой данных:

http://codepad.org/wwGNrTJm

Третий файл для констант, он содержит информацию для базы данных, такую ​​как pass, user и т. Д .:

http://codepad.org/dl0QQbi9

лучше?

Спасибо еще раз за помощь.

Проблема в том, что вы установили соединение с помощью MySQLi , но затем вызываете mysql_real_escape_string() . Вы намерены называть mysqli_real_escape_string() либо в процедурном контексте, либо в объектно-ориентированном контенсе.

 class Mysql { private $conn; function __construct() { $this->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME) or die('No Connection to database!'); } function add_non_member($data) { $email = $data->email; // Procedural call $san_email = mysqli_real_escape_string($this->conn, $email); // Or OO call (recommended) $san_email = $this->conn->real_escape_string($email); // etc... } // etc...; } 

Вы смешиваете ext / mysqli

 $this->conn = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME 

с функциями ext / mysql:

 $san_email = mysql_real_escape_string($email); 

что последняя строка должна быть

 $san_email = $this->conn->real_escape_string($email); 

Я также получил это предупреждение о запрете доступа, и я смог найти решение. Проблема в том, что я не установил соединение mysql db перед вызовом функции mysql_real_escape_string.

Решение:

  • Сначала вызовите mysql_connect ($ host, $ user, $ password) (или вы можете вызвать функцию подключения к базе данных)
  • Затем используйте mysql_real_escape_string ($ var)