Проблемы с подключением Windows 7 PHP MySQL [дубликат]
На этот вопрос уже есть ответ здесь:
Когда я запускаю $conn = mysql_connect($host, $user, $pass);
, я могу подключиться к базе данных, но когда я выполняю var_dump($conn)
, я возвращаюсь bool(true)
, что ограничивает меня от множественного подключения к нескольким серверам.
Исходная настройка на этот компьютер был XAMPP с версией PHP 5.2, которая была обновлена до PHP 5.3.4 с помощью установщика PHP. Он мог подключиться к своей локальной базе данных без проблем (кроме возврата логического значения вместо идентификатора ссылки на ресурс), но не мог подключиться ни к каким удаленным машинам (и возможность подключения к удаленным машинам была подтверждена). Не имея возможности придумать решение, я обновился до версии XAMPP, в которую встроен PHP 5.3.1. Я получаю точно такую же ошибку после свежая переустановка XAMPP, которая наводит меня на мысль, что это более серьезная проблема.
Редактировать 1**
Переходя к чистой установке Windows, устанавливая XAMPP и пытаясь запустить mysql_connect на удаленный сервер (PHP 5.3.1), я получаю ту же ошибку:
Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:554) in [Removed] on line 2
Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in [Removed]p on line 2
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file in [Removed] on line 2
4 answers
Отметьте опцию old_passwords
в вашем файле my.cnf
.
Http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_old-passwords
Если по какой-либо причине вы не можете переключиться на новые пароли, вы не можете использовать mysqlnd
в качестве драйвера MySQL, и вам нужно вернуться к более старому.
Дополнительная информация о mysqlnd
Что касается ошибки, опубликованной в вашем редактировании, я получал ту же ошибку в Windows 7 с использованием PHP 5.3.5 при подключении к MySQL 5.0.45 в Linux. Решением для меня было отключить "old_passwords" в моем файле.cnf И запустить
set password = password('my password');
Сообщение об ошибке не дает понять, что вам нужно выполнить оба шага, чтобы устранить проблему. Надеюсь, это поможет.
Если вы хотите изменить свой пароль, а сервер продолжает генерировать хэши размером 16 байт, вы можете попробовать следующее:
1) сгенерируйте 41-байтный хэш самостоятельно (используя какой-нибудь веб-сайт генератора хэшей) например , пароль: "qwerty" хэш: "aa1420f182e88b9e5f874f6fbe7459291e8f4601"
2) измените пароль УСТАНОВИТЕ ПАРОЛЬ ДЛЯ 'имя пользователя'= '*aa1420f182e88b9e5f874f6fbe7459291e8f4601'
Теперь вы должны иметь возможность подключиться к базе данных с помощью новой аутентификации метод
Я перепробовал почти все, что перечислено здесь (и в других местах), но безрезультатно, пока не нашел это:
УСТАНОВИТЬ old_passwords = 0; ОБНОВИТЬ mysql.пользователь УСТАНОВИЛ пароль = ПАРОЛЬ ('testpass'), ГДЕ Пользователь = 'тестовый пользователь' ограничение 1; ВЫБЕРИТЕ ДЛИНУ (пароль) ИЗ mysql.user, ГДЕ User = 'тестовый пользователь'; ПРИВИЛЕГИИ СБРОСА;
Поместите это в свой клиент mysql или phpmyadmin и измените testpass на пароль для входа в БД, а testuser на пользователя для входа в БД, выполните запрос. Большой успех! проблема решенный.