2010-01-24 7 views
2

Quelqu'un me aider:Quel est le problème avec cette requête?

$query = "INSERT INTO tbl_users(user, password, password_def, userid, level 
      , regdate, lastdate, email) VALUES('$username', sha1('$password') 
      , sha1('$password'), '$userid', '0', NOW(), NOW(), '$email');"; 

$userid est un identifiant de md5 ramdon.

Il me donne cette erreur:

posttokenError: Account not created You have an error in your SQL syntax; 
    check the manual that corresponds to your MySQL server version for the right 
    syntax to use near '\'esck21\', sha1(\'password\'), sha1(\'password\'), 
    \'14bd25cbe111c2975232b33ee8c2' at line 1 

Je pense que je vais avoir une crise cardiaque. Merci.

Répondre

2

A en juger par le message d'erreur, il semble que vous pourriez appelez une sorte de fonction échappant à toute requête , tels que addslashes($query) ou mysql_real_escape_string($query). Cela permettra d'échapper chaque citation dans la requête, quand vraiment ce que vous voulez faire est seulement d'échapper les citations qui sont à l'intérieur de vos variables.

Si tel est le cas, alors vous voulez faire quelque chose comme ceci:

$query = "INSERT INTO tbl_users(user, password, password_def, userid, level, 
regdate,lastdate, email) VALUES('".mysql_real_escape_string($username)."', 
sha1('".mysql_real_escape_string($password)."'), 
sha1('".mysql_real_escape_string($password)."'), 
'".mysql_real_escape_string($userid)."', '0', 
NOW(), NOW(), '".mysql_real_escape_string($email)."')"; 

Cela va bien échapper à vos données sans échapper à tort le reste de la requête. Une fois que vous avez fait cela, n'exécutez pas $query comme une chaîne entière à travers d'autres formes d'échappement.

+0

+1 Je crois que c'est la bonne réponse. –

+0

Le champ 'password' ne devrait-il pas être rétrodiffusé? –

+0

Je ne sais pas pourquoi cette réponse est downvoted. Le message d'erreur affiche clairement les barres obliques inverses là où elles ne devraient pas être, ce qui entraîne l'insertion de valeurs sans guillemets où une valeur de chaîne est attendue et la valeur non citée est interprétée comme un nom de colonne invalide (je crois) –

1

Vous devez ACCENT GRAVE (`) le champ Mot de passe:

$query = "INSERT INTO `tbl_users` (`user`, `password`, `password_def`, `userid` 
       , `level`, `regdate`, `lastdate`, `email`) 
      VALUES('$username', 'sha1($password)', 'sha1($password)', '$userid' 
       , '0', NOW(), NOW(), '$email');"; 

Vous devriez toujours backtick vos champs, des tables et des bases de données.

Encore une chose: faites attention à SQL Injections, utilisez mysql_real_escape_string(). Après une discussion, je suis convaincu que votre problème réside dans l'utilisation de vos citations, vérifiez la réponse de zombat.

+0

qui n'a pas fonctionné. – CSSJediEsck21

+0

@ CSSJediEsck21: Cela aurait pu être la fonction 'sha1()', devrait être 'sha1 ($ pass) '' au lieu de 'sha1 (' $ pass ')'. Je l'ai mis à jour. Réessayer. –

+0

@Alix, re: le point-virgule: Oups, ne rien deviner. Jamais vu le point-virgule inclus avant, sauf si c'est directement dans un fichier sql. A appris quelque chose de nouveau – munch

Questions connexes