问题
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
回答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;
回答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.
回答3:
If using MySQL 4.1 + Try this
At the MySQL Command line
mysql> set old_passwords = 0;
mysql> set password for 'user'@'some.host.domain' = PASSWORD('new_pass');
mysql> set old_passwords = 1;
回答4:
That you are connecting to localhost suggests that you probably don't have network problems.
First hit in Google lists 2 possible causes/remedies.
This message appears when one is using PHP 5.3... with MySQL database that is intended to be used with PHP 5.2... I noticed that when I changed to another version of Uniform Server.
If you don't have access to the database and are mainly using this remote connection to development purposes (like me) a solution to the is to have configurations with both PHP versions (currently the latest Uniform Server with PHP 5.2... appears to be 5.6b-Nano with PHP 5.2.13).
来源:https://stackoverflow.com/questions/6099434/premature-end-of-data-error-with-php