Ошибка доступа запрещена при использовании mysql_real_escape_string () - PullRequest
4 голосов
/ 02 марта 2012

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

Warning: mysql_real_escape_string(): Access denied for user 

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

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

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

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

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

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

http://codepad.org/kGPljN4I

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

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

http://codepad.org/wwGNrTJm

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

http://codepad.org/dl0QQbi9

лучше?

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

Ответы [ 3 ]

9 голосов
/ 02 марта 2012

Проблема в том, что вы установили соединение с помощью 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...;
}
3 голосов
/ 02 марта 2012

Вы смешиваете 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);
0 голосов
/ 29 марта 2014

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

Решение:

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