"Premature end of data" error with PHP

19,184

Solution 1

I had the same problem and fixed it using an UPDATE query like this:

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

Don't know why but SET Password didn't work.

To be sure that the problem is the one i think you should do this query on the mysql database:

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

if the password doesn't start with a * the problem is that you still have the old encription

EDIT _ Here is a php function to create valid password for MYSQL (taken from here):

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

Thene you can set the password manually:

//newpwd is the passowr dgenerated in php
UPDATE mysql.user SET Password = 'newpwd' WHERE Host = 'some_host' AND User = 'some_user';
FLUSH PRIVILEGES;

Solution 2

The above problem occurs because of version in-compatibility between PHP and MySQL. Mostly it may occur during remote access of db.

Kindly check your PHP and MySQL versions.

My versions are PHP-5.3.6 (Local machine) and MySQL 5.1.56 (Live DB).

My MySQL is placed in live domain and I kept my PHP files in local machine. I faced the same password rest problem.

Then I replace my XAMPP with older version it changed my PHP version to 5.3.0. Now the above problem was solved and I am able to access the live db from local.

Share:
19,184
Admin
Author by

Admin

Updated on June 14, 2022

Comments

  • Admin
    Admin almost 2 years

    I've just started using WAMP for a PHP project and I get the next errors related with this line of code:

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

    I read that I had to do the SET PASSWORD again with my old password, but it still does not work after restarting all services. I am using PHP 5.3.4 and MySQL 5.1.53 Any help? THANKS

    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 
    
  • Admin
    Admin almost 13 years
    I did that and my password is 038872231aa1b123. How do I change to new encryption? THANKS
  • Admin
    Admin almost 13 years
    I tried that but I have no "my.cnf" file. Just a "my.ini" and it does not have any "old_passwords" line.
  • Nicola Peluchetti
    Nicola Peluchetti almost 13 years
    Are you sure that you don't have something like old-passwords in your ini file?
  • Nicola Peluchetti
    Nicola Peluchetti almost 13 years
    Well you can generate a valid password in php and set it with an update query then, i updated my answer to show how to do it. Hope it helps
  • Sankar Subburaj
    Sankar Subburaj over 12 years
    I am using remote server, resolve this type issues by using the above method needs root access(SSH) of the server. Most of the clients didn't give those secure details. Otherwise it is very easy and quick way to resolved the reset password issue.