Вопрос

Кажется, я не могу подключиться к MySQL с помощью сценария PHP, хотя я могу нормально подключиться с помощью phpmyadmin.Я создал пользователя с паролем и дал ему необходимые привилегии для базы данных, но каждый раз, когда он подключается, он умирает, говоря, что доступ запрещен.Я использую xampp в окне Windows XP.Все брандмауэры отключены, и я проверил правильность имени пользователя и пароля.Вот код:

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

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

Это было полезно?

Решение

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

Из ручной записи для mysql_connect():

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

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

Другие советы

Я видел это раньше, когда один пользователь 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@%.

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

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

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

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

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

и дал ему необходимые привилегии для БД

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top