Я думаю, что сообщение об ошибке указывает, что PHP смог связаться с MySQL Server с помощью файла сокета. (В противном случае это была бы другая ошибка.)
Существует несколько причин, по которым вы можете получить эту ошибку. Если мы сможем успешно подключиться к серверу MySQL с клиентом командной строки MySQL, как это:
> mysql --no-defaults -h localhost -u study -psomepassword user_study
Это будет исключать много возможных причин отказа.
Наиболее разумным объяснением сообщения об ошибке с PHP является то, что пароль, предоставленный при попытке подключения с PHP, не соответствует паролю, который ожидает MySQL.
Некоторые идеи, которые мы должны уметь исключать. Привилегии в базе данных user_study
предоставлены 'study'@'localhost'
, например.
GRANT SELECT ON user_study.* TO 'user'@'localhost'
На совершенно другой галс, учитывая оператор присваивания:
$password = "somepassword";
И если предположить, что вы не будет поставлять фактический пароль в вопросе ... мы оставили интересно если действительный пароль содержит символы, подверженные интерпретации строк PHP, такие как символ обратной косой черты или знак доллара.
Для отладки я предлагаю выполнить echo $password;
после назначения и убедиться, что испущенная строка является ожидаемой.
Другая возможность заключается в том, что в mysql нет точного соответствия.пользовательская таблица, а пользовательское «исследование» фактически соответствует другому mysql.user
... записи с пустым пользователем ''@'localhost'
.
Я бы посмотрел на все записи в таблице mysql.user
, где user = 'study' и user = ''.
Я также хочу исключить возможность того, что клиент командной строки mysql использует файл .mylogin.cnf.
Я также испытываю искушение предположить, что изменения были применены к таблице mysql.user, и инструкция FLUSH PRIVILEGES
не была выполнена ... но это не приводит к поведению (успешному соединению), наблюдаемому в команде mysql лайн клиента.
Мы предполагаем, что сервер MySQL работает локально на той же машине, на которой выполняется PHP. И мы ожидаем подключения через локальный файл сокета.
В качестве теста я бы посоветовал подключиться через TCP. Указание хоста как 127.0.0.1. Это потребует другой записи в таблице mysql.user. Мы хотели проверить соединение от клиента командной строки MySQL:
> mysql --no-defaults -h 127.0.0.1 -u study -psomepassword user_study
Но это попадет в целый ряд других проблем конфигурации с MySQL сервером, сети включены, привязать адрес, разрешение имен DNS, прослушивание порта, Iptables, брандмауэр и др.
-
Если проблема была неподдерживаемый протокол аутентификации, я бы ожидать различные ошибки. Если проблема заключалась в невозможности подключения к файлу сокета, я также ожидал бы другую ошибку.
Все обычные причины этой ошибки, по-видимому, исключаются из успешного соединения с клиентом командной строки, запущенного на локальном компьютере, для подключения к тем же учетным данным.
попытайтесь сменить хост с localhost на%. любой хост –
Ничего не изменилось при принятии какого-либо хоста – Firebarrage
Попробуйте следующее: $ con = 'mysqli_connect (" localhost "," my_user "," my_password "," my_db ");' –