2013-05-08 3 views
0

Ce qui suit est mon code: Remarque: CONNECTDATA est une donnée valide, substituée pour des raisons de sécurité.Erreur MySQL, nouveau à SQL

$con = mysqli_connect(CONNECTDATA); 
    // Check connection 
if (mysqli_connect_errno($con)) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
     $username = mysql_real_escape_string($_POST["username"]); 
     $email = mysql_real_escape_string($_POST["email"]); 
     $igname = mysql_real_escape_string($_POST["gamename"]); 
     $pass = crypt($_POST["password"]); 
     if(!mysqli_query($con, "INSERT INTO users (username, email, igname, password) VALUES ($username, $email, $igname, $pass)")){ 
      die('Error' . mysqli_error($con)); 
     } 

Je suis nouveau à SQL et c'est un projet d'expérience d'apprentissage, je reçois cette erreur: ErrorYou ont une erreur dans votre syntaxe SQL; vérifier le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de '@ mail.com, alphabravo, $ 1 $ dg1.iu3. $ oZIgB6gFwjAcywv/zadG3 /)' à la ligne 1

Je ne comprends pas ce qui est mal Avec ma syntaxe, l'aide est très appréciée.

+1

Vous devez citer les valeurs vous passez à votre requête. Mieux encore, utiliser des états préparés et des espaces réservés. – andrewsi

+2

Ne pas mélanger et faire correspondre MySQLi et MySQL; et si vous utilisez MySQLI, utilisez les instructions préparées pour empêcher l'injection SQL. –

Répondre

4

La raison pour laquelle cela se produit est parce que vous devez citer vos valeurs de chaîne, par ex.

INSERT INTO users (username, email, igname, password) VALUES ('$username', '$email', '$igname', '$pass') 

Encore mieux serait d'utiliser prepared statements pour empêcher l'injection SQL et nier la nécessité d'utiliser mysqli_real_escape_string

$con = mysqli_connect(CONNECTDATA); 
... 
$stmt = mysqli_prepare($con, "INSERT INTO users (username, email, igname, password) VALUES (?, ?, ?, ?)"); 
mysqli_stmt_bind_param($stmt, 'ssss', $username, $email, $igname, $pass); 
mysqli_stmt_execute($stmt); 
mysqli_stmt_close($stmt); 
+0

Aimerait savoir pourquoi cela a eu une downvote – RMcLeod

0

Ne pas mélanger avec mysqlimysql, utiliser avec mysqli

$username = mysqli_real_escape_string($_POST["username"]); 
$email = mysqli_real_escape_string($_POST["email"]); 
$igname = mysqli_real_escape_string($_POST["gamename"]); 

Modifier

Utilisez cette déclaration préparée comme

if(($stmt = mysqli_prepare($con, "INSERT INTO users (username, email, igname, password) 
VALUES (?,?,?,?)"))) { 
    /* bind parameters for markers */ 
    mysqli_stmt_bind_param($stmt, "s", $username); 
    mysqli_stmt_bind_param($stmt, "s", $email); 
    mysqli_stmt_bind_param($stmt, "s", $igname); 
    mysqli_stmt_bind_param($stmt, "s", $pass); 

    /* execute query */ 
    mysqli_stmt_execute($stmt); 
} 
+0

@MarkBaker Voir la réponse éditée. Maintenant, vous pouvez supprimer votre downvote .. :) –

+1

Je n'ai pas downvote, quelqu'un l'avait déjà fait avant même que j'ai posté mon commentaire; mais je peux maintenant upvote –

+0

Aucun de ces codes ne fonctionnera. Je comprends le désir de donner une «bonne» réponse. Mais si vous ne savez pas vraiment quelle est la bonne réponse - pourquoi répondre alors? –

0

Comme andrewsi dit le commentaire, vous devez utiliser des guillemets lors de l'envoi de chaînes à la base de données.

Ainsi, votre sqlquery devrait être:

if(!mysqli_query($con, "INSERT INTO users (username, email, igname, password) VALUES ('$username', '$email', '$igname', '$pass')")){ 

Si vous voulez passer un ENTIER (ou d'autres valeurs numériques), alors vous ne devez utiliser des guillemets (tant que le champ de base de données est aswell numérique).

0

Votre syntaxe SQL est incorrecte.
Un chaîne doit être toujours cité et échappé. Une fonction adéquate d'échappement doit être utilisée.

$username = mysqli_real_escape_string($con, $_POST["username"]); 
$email = mysqli_real_escape_string($con,$_POST["email"]); 
$igname = mysqli_real_escape_string($con,$_POST["gamename"]); 
$pass = mysqli_real_escape_string($con,crypt($_POST["password"])); 

$sql = "INSERT INTO users (username, email, igname, password) 
     VALUES ('$username', '$email', '$igname', '$pass')" 
mysqli_query($con, $sql) or trigger_error($con->error);