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 ответа

Решение

Проверьте old_passwords вариант в вашем my.cnf файл.

http://dev.mysql.com/doc/refman/5.0/en/server-options.html

Если по какой-либо причине вы не можете перейти на новые пароли, вы не можете использовать mysqlnd как ваш драйвер MySQL, и нужно переключиться обратно к старому.

Еще немного информации о mysqlnd

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

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

set password = password('my password');

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

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

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

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

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

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

SET old_passwords = 0; ОБНОВЛЕНИЕ mysql.user SET Password = PASSWORD('testpass') WHERE User = 'testuser' предел 1; ВЫБЕРИТЕ ДЛИНУ (пароль) ОТ mysql.user WHERE User = 'testuser'; ПРИВИЛЕГИИ ПРОМЫВКИ;

Перетащите это в свой клиент MySQL или phpmyadmin и измените тестовый пароль на ваш пароль для входа в БД, а тестовый пользователь на вашего пользователя для входа в БД, выполните запрос. Огромный успех! задача решена.

Другие вопросы по тегам