не может подключиться к MySQL с PHP - PullRequest
10 голосов
/ 21 марта 2009

Кажется, я не могу подключиться к mysql с помощью php-скрипта, хотя могу нормально подключиться к phpmyadmin. Я создал пользователя с паролем и дал ему необходимые привилегии для БД, но каждый раз, когда он подключается, он умирает, говоря, что доступ запрещен. Я использую XAMPP на Windows XP Box. Все брандмауэры отключены, и я проверил правильность имени пользователя и пароля. Вот код:

$conn=mysql_connect('localhost','westbrookc16','megadots') || die (mysql_error());

Должны ли имена пользователей быть в определенном формате или что-то в этом роде?

Ответы [ 8 ]

17 голосов
/ 21 марта 2009

У меня есть догадка, что проблема здесь в том, какой хост вы предоставили, хотя на самом деле это не более чем обоснованное предположение. Если вы предоставите доступ myuser@'127.0.0.1 'или фактический IP-адрес сервера, вам не разрешат подключаться, используя localhost в качестве хоста. Это связано с тем, что когда в качестве хоста указано «localhost», php будет предполагать, что вы хотите использовать сокет unix вместо сетевых сокетов, и в этом контексте 127.0.0.1 отличается от localhost.

Из ручного ввода для mysql_connect () :

Примечание: всякий раз, когда вы указываете "localhost" или "localhost: порт" в качестве сервера, Клиентская библиотека MySQL переопределит это и попробуйте подключиться к местному сокет (именованный канал в Windows). если ты хотите использовать TCP / IP, используйте "127.0.0.1" вместо "localhost". Если MySQL клиентская библиотека пытается подключиться к неправильный локальный сокет, вы должны установить правильный путь как конфигурация времени выполнения в вашей конфигурации PHP и оставьте поле сервера пустое.

Надеюсь, это не совсем излишне. :)

6 голосов
/ 21 марта 2009

Я видел это раньше, когда один пользователь mysql входит в систему через php, а другой - нет. Иногда пользователь даже работает из командной строки, но не из php.

Эмиль всегда говорил о двух. Пользователь mysql - это действительно пара пользователь / хост. таким образом, пользователь megadots @ localhost и пользователь megadots @ mycoolhost указаны в таблице mysql.user как две отдельные записи.

Если вы можете войти в систему из командной строки, выполните этот запрос.

SELECT user, host FROM mysql.user

вы должны увидеть полный список пользователей и их хостов.

если вы узнаете работающего пользователя phpMyAdmin, посмотрите на столбец хоста, который, вероятно, является хостом, который вы хотите использовать.

для сброса хоста выполните эти запросы (будьте осторожны при работе с таблицей привилегий для всей установки mysql)

update mysql.user set host = 'hostname' 
where user = 'username' and host = 'oldhostname';

flush privileges;

Если вы видите запись с именем пользователя и% в качестве хоста, который будет иметь приоритет над всем остальным, если для пользователя существует несколько записей и% в качестве хоста для одной из них, возможно, что имя пользователя с% как на хосте указан неверный пароль, и независимо от того, сколько раз вы сбрасываете пароль username @ localhost, он недействителен, поскольку при входе в систему он будет сравниваться с username @%.

2 голосов
/ 15 июля 2012

В моем случае оказалось, что я удалил пользователя, который использовался для создания базы данных, которую я использовал. Обычно это должно выдавать ошибку «указанный пользователем определитель не существует», но по какой-то причине он просто возвращал более общий доступ, запрещенный моему PHP-коду. Я не уверен, почему я все еще мог войти через командную строку и другие интерфейсы. Чтобы исправить мою проблему, я воссоздал удаленного пользователя.

2 голосов
/ 20 декабря 2011

Если вы используете Linux, используйте менеджер пакетов synaptic, чтобы найти и загрузить все библиотеки и моды, которые нужны PHP и MySQL, чтобы они оба могли подключаться. Моя проблема заключалась в том, что PHP-скрипты, работающие в одиночку, работали на стороне сервера, но когда я пытался использовать PHP-скрипты для подключения к MySQL, он не подключался, я видел только белую страницу. Затем я заметил, что у меня нет клиентских библиотек MySQL, которые PHP использует для соединения с MySQL. У меня были только серверные библиотеки MySQL. После того, как я установил клиентские библиотеки и перезапустил сервер apache, мои PHP-скрипты без проблем подключались. По умолчанию PHP 5 не поставляется с клиентскими библиотеками MySQL.

0 голосов
/ 26 февраля 2018

У меня была такая же проблема, но потом я понял, что если вы оставите в учетных записях по умолчанию "%" (любой хост), НЕТ ПАРОЛЯ, то вы просто не сможете соединиться с паролем. Я не уверен, что именно проблема, но удаление их решило ее.

0 голосов
/ 02 июля 2013

После возникновения аналогичной проблемы я обнаружил, что замена '127.0.0.1' на 'localhost' сделала свое дело (несмотря на то, что я смог успешно подключиться через терминал, используя 'localhost').

0 голосов
/ 21 марта 2009

Это будет либо опечатка, либо вам не предоставлены привилегии. Иногда это может быть тревожно трудно обнаружить.

Я советую не использовать phpmyadmin, а загрузить копию SQLYOG (бесплатная версия для сообщества великолепна) и попытаться войти через нее с этим пользователем. Как только у вас будет диагностирована проблема, скопируйте / вставьте имя пользователя / пароль обратно в ваш скрипт.

Кстати, с phpmyadmin все в порядке, но такая программа, как sqlyog, в целом более удобна, так что стоит все равно проверить - я уверен, что вы будете преобразованы. Если sqlyog вам не по вкусу, есть несколько других бесплатных и коммерческих альтернатив.

0 голосов
/ 21 марта 2009

и дал ему надлежащие привилегии для БД

Как? Какой хост вы использовали для пользователя при предоставлении?

Вот как это обычно делается:

GRANT ALL ON mydb.* TO 'someuser'@'somehost' identified by 'password';
FLUSH privileges;

в вашем случае «somehost», вероятно, должно быть «localhost» или «127.0.0.1» (см. Другой пост)

Синтаксическая ссылка: http://dev.mysql.com/doc/refman/5.1/en/grant.html

...