Я пытаюсь избежать некоторых данных, прежде чем он войдет в мою базу данных, но я продолжаю получать эту ошибку:
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.
Решение: