Ошибка «преждевременный конец данных» с PHP - PullRequest
7 голосов
/ 23 мая 2011

Я только начал использовать WAMP для проекта PHP, и я получаю следующие ошибки, связанные с этой строкой кода:

$link=mysql_connect("localhost","myuser","mypas");

Я прочитал, что мне пришлось снова выполнить SET PASSWORD со своим старымпароль, но он все равно не работает после перезапуска всех служб.Я использую PHP 5.3.4 и MySQL 5.1.53 Любая помощь?СПАСИБО

Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:554) in C:\wamp\www\CDE\includes\baseDatos.php on line 5 
Call Stack 
1 0.0002 667312 {main}( ) ..\index.php:0 
2 0.0008 682416 include( 'C:\wamp\www\CDE\includes\seguridad.php' ) ..\index.php:2 
3 0.0010 690984 include( 'C:\wamp\www\CDE\includes\baseDatos.php' ) ..\seguridad.php:2 
4 0.0014 692368 mysql_connect ( ) ..\baseDatos.php:5 

( ! ) Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in C:\wamp\www\CDE\includes\baseDatos.php on line 5 
Call Stack 
1 0.0002 667312 {main}( ) ..\index.php:0 
2 0.0008 682416 include( 'C:\wamp\www\CDE\includes\seguridad.php' ) ..\index.php:2 
3 0.0010 690984 include( 'C:\wamp\www\CDE\includes\baseDatos.php' ) ..\seguridad.php:2 
4 0.0014 692368 mysql_connect ( ) ..\baseDatos.php:5 

( ! ) 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 C:\wamp\www\CDE\includes\baseDatos.php on line 5 
Call Stack 
1 0.0002 667312 {main}( ) ..\index.php:0 
2 0.0008 682416 include( 'C:\wamp\www\CDE\includes\seguridad.php' ) ..\index.php:2 
3 0.0010 690984 include( 'C:\wamp\www\CDE\includes\baseDatos.php' ) ..\seguridad.php:2 
4 0.0014 692368 mysql_connect ( ) ..\baseDatos.php:5 

Ответы [ 4 ]

5 голосов
/ 23 мая 2011

У меня была та же проблема, и я исправил ее с помощью запроса UPDATE, например:

UPDATE mysql.user SET Password = PASSWORD('newpwd') WHERE Host = 'some_host' AND User = 'some_user';

Не знаю почему, но SET Password не работает.

Чтобы быть уверенным, что проблема в том, я думаю, вы должны выполнить этот запрос в базе данных mysql:

SELECT
`user`.`Password`
FROM
`user`
WHERE
`user`.`User` = 'youruser' AND
`user`.`Host` = 'yourhost'

если пароль не начинается с *, проблема в том, что у вас все еще есть старая надпись

EDIT _ Вот функция php для создания действительного пароля для MYSQL (взято из здесь ):

function mysql_41_password($in)
{
$p=sha1($in,true);
$p=sha1($p);
return "*".strtoupper($p);
}

Таким образом, вы можете установить пароль вручную:

//newpwd is the passowr dgenerated in php
UPDATE mysql.user SET Password = 'newpwd' WHERE Host = 'some_host' AND User = 'some_user';
FLUSH PRIVILEGES;
4 голосов
/ 04 января 2012

Данная проблема возникает из-за несовместимости версий между PHP и MySQL.В основном это может происходить во время удаленного доступа к базе данных.

Пожалуйста, проверьте ваши версии PHP и MySQL.

Мои версии PHP-5.3.6 (локальный компьютер) и MySQL 5.1.56 (Live DB).

Мой MySQL размещен в рабочем домене, а мои файлы PHP хранились на локальном компьютере.Я столкнулся с той же проблемой восстановления пароля.

Затем я заменил свой XAMPP на более старую версию, он изменил мою версию PHP на 5.3.0.Теперь вышеуказанная проблема была решена, и я могу получить доступ к живой базе данных из локальной сети.

0 голосов
/ 12 марта 2014

При использовании MySQL 4.1 + Попробуйте это

В командной строке MySQL

mysql> set old_passwords = 0; mysql> set password for 'user'@'some.host.domain' = PASSWORD('new_pass'); mysql> set old_passwords = 1;

0 голосов
/ 23 мая 2011

То, что вы подключаетесь к localhost, говорит о том, что у вас, вероятно, нет проблем с сетью.

Первое попадание в Google перечисляет 2 возможные причины / способы устранения.

Это сообщение появляется, когда кто-то использует PHP 5.3 ... с базой данных MySQL, которая предназначена для использования с PHP 5.2 ... Я заметил, что когда я перешел на другую версия Единого Сервера.

Если у вас нет доступа к базе данных, и вы в основном используете это удаленное соединение для целей разработки (как я), то решение заключается в том, чтобы иметь конфигурации с обеими версиями PHP (в настоящее время это последняя версия Uniform Server с PHP 5.2 ..). .. кажется 5.6b-Nano с PHP 5.2.13).

...