2011-05-23 4 views
7

Je viens de commencer à utiliser WAMP pour un projet PHP et je reçois les prochaines erreurs liées à cette ligne de code:erreur « Fin prématurée des données » avec PHP

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

Je lis que je devais faire le SET PASSWORD à nouveau avec mon ancien mot de passe, mais cela ne fonctionne toujours pas après le redémarrage de tous les services. J'utilise PHP 5.3.4 et MySQL 5.1.53 Toute aide? MERCI

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 
+0

s'il vous plaît coller le code de 'baseDatos.php' sur http: // www.ideone.com' et lien ici. – diEcho

+0

Peut-être aussi consulter [Problèmes de connexion MySQL avec Windows 7 PHP] (http://stackoverflow.com/questions/4807072/windows-7-php-mysql-connection-issues). –

+0

baseDatos.php est juste un "fichier include" avec cette information: http://www.ideone.com/pOvt9. Si cela aide, en faisant le mot de passe SELECT de mysql.user, j'obtiens un mot de passe de 16 octets au lieu de l'original "mypas". – Arturo

Répondre

5

J'ai eu le même problème et se fixe à l'aide d'une requête UPDATE comme ceci:

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

Je ne sais pas pourquoi, mais SET mot de passe ne fonctionne pas.

Pour être sûr que le problème est celui que je pense que vous devriez faire cette requête sur la base de données MySQL:

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

si le mot de passe ne démarre pas avec * le problème est que vous avez toujours la vieux encription

EDIT _ Voici une fonction php pour créer un mot de passe valide pour MYSQL (extrait de here):

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

Thene vous pouvez définir le mot de passe manuellement:

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

Je l'ai fait et mon mot de passe est 038872231aa1b123. Comment changer de nouveau cryptage? MERCI – Arturo

+0

Etes-vous sûr que vous n'avez pas quelque chose comme vieux-mots de passe dans votre fichier ini? –

+0

Assez sûr, j'ai cherché sur my.ini et php.ini sans résultats ... – Arturo

0

Si vous vous connectez à localhost, cela signifie que vous n'avez probablement pas de problèmes de réseau.

First hit in Google répertorie 2 causes/remèdes possibles.

Ce message apparaît quand on utilise PHP 5.3 ... avec base de données MySQL qui est destiné à être utilisé avec PHP 5.2 ... J'ai remarqué que lorsque je l'ai changé à une autre version du serveur uniforme. Si vous n'avez pas accès à la base de données et utilisez principalement cette connexion à distance pour le développement (comme moi), une solution consiste à avoir des configurations avec les deux versions de PHP (actuellement le dernier Uniform Server avec PHP 5.2. .. semble être 5.6b-Nano avec PHP 5.2.13).

+2

J'ai essayé mais je n'ai pas de fichier "my.cnf". Juste un "my.ini" et il n'a pas de ligne "old_passwords". – Arturo

4

Le problème ci-dessus se produit en raison de l'incompatibilité de version entre PHP et MySQL. Généralement, il peut se produire lors de l'accès à distance de DB.

Veuillez vérifier vos versions PHP et MySQL.

Mes versions sont PHP-5.3.6 (Machine locale) et MySQL 5.1.56 (Live DB). Mon MySQL est placé dans un domaine en direct et j'ai gardé mes fichiers PHP dans la machine locale. J'ai fait face au même problème de repos de mot de passe.

Ensuite, je remplace mon XAMPP avec une version plus ancienne, il a changé ma version de PHP à 5.3.0. Maintenant, le problème ci-dessus a été résolu et je suis en mesure d'accéder à la base de données en direct local.

0

Si vous utilisez MySQL 4.1 + Essayez cette

à la ligne de commande MySQL

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

Questions connexes