Проблемы с подключением 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
Author: hakre, 2011-01-26

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

Http://dev.mysql.com/downloads/connector/php-mysqlnd/

 4
Author: Mchl, 2011-01-26 16:35:08

Что касается ошибки, опубликованной в вашем редактировании, я получал ту же ошибку в Windows 7 с использованием PHP 5.3.5 при подключении к MySQL 5.0.45 в Linux. Решением для меня было отключить "old_passwords" в моем файле.cnf И запустить

set password = password('my password');

Сообщение об ошибке не дает понять, что вам нужно выполнить оба шага, чтобы устранить проблему. Надеюсь, это поможет.

 4
Author: mmalone, 2011-03-11 19:21:23

Если вы хотите изменить свой пароль, а сервер продолжает генерировать хэши размером 16 байт, вы можете попробовать следующее:

1) сгенерируйте 41-байтный хэш самостоятельно (используя какой-нибудь веб-сайт генератора хэшей) например , пароль: "qwerty" хэш: "aa1420f182e88b9e5f874f6fbe7459291e8f4601"

2) измените пароль УСТАНОВИТЕ ПАРОЛЬ ДЛЯ 'имя пользователя'= '*aa1420f182e88b9e5f874f6fbe7459291e8f4601'

Теперь вы должны иметь возможность подключиться к базе данных с помощью новой аутентификации метод

 2
Author: misczu, 2011-04-23 11:45:44

Я перепробовал почти все, что перечислено здесь (и в других местах), но безрезультатно, пока не нашел это:

УСТАНОВИТЬ old_passwords = 0; ОБНОВИТЬ mysql.пользователь УСТАНОВИЛ пароль = ПАРОЛЬ ('testpass'), ГДЕ Пользователь = 'тестовый пользователь' ограничение 1; ВЫБЕРИТЕ ДЛИНУ (пароль) ИЗ mysql.user, ГДЕ User = 'тестовый пользователь'; ПРИВИЛЕГИИ СБРОСА;

Поместите это в свой клиент mysql или phpmyadmin и измените testpass на пароль для входа в БД, а testuser на пользователя для входа в БД, выполните запрос. Большой успех! проблема решенный.

 0
Author: RAC, 2011-03-28 21:08:01