2011-02-16 4 views
0

J'ai un tas d'appels de base de données dans mon code.Quel est le problème avec ma requête SQL?

L'un d'eux est comme ceci:

mysql_query("INSERT INTO coupons (id, retailerName, description, savingsDetails, pictureURL, rating, qrPicture, zipCode, dateAdded, dateExp) VALUES ('$newID', '$retailerName', '$description', '$savingsDetails', '$pictureURL', '0', '$qrPicture', '$zipCode', '$dateAdded', '$dateExp')"); 

Toutes les autres bases de données appelle fonctionne parfaitement, mais celui-ci ne suffit pas écrire des données sur la table. Qu'est ce qui ne va pas avec ça?

+1

Encore un site de coupons, oh non. – zerkms

+1

Vous avez une vulnérabilité SQL Injection. – SLaks

Répondre

4

Vérifiez le retour de la requête mysql.

$result = mysql_query($query); 
if ($result === false) { 
    // Prints the query and the mysql error to help you find the problem. 
    die($query.'<br/>'.mysql_error()); 
} 

S'il y a un problème avec la requête, elle vous dira ce que c'était.

mysql_query() renvoie true en cas de succès et false sur erreur pour les requêtes qui ne retournent pas quelque chose.

http://php.net/manual/en/function.mysql-query.php

Lors de l'utilisation mysql_query() dans la production, vous devriez vérifier la valeur de retour, et la sortie gracieusement en cas d'erreur, et connectez-vous de préférence afin qu'il puisse vous aider à résoudre les problèmes.

Lors de l'exécution d'une requête utilisant une entrée utilisateur, veillez à utiliser mysql_real_escape_string() pour éviter l'injection SQL et à protéger les entrées contenant une seule citation, ce qui annulerait votre requête actuelle.

http://php.net/manual/en/function.mysql-real-escape-string.php

1

Vérifiez la valeur de retour de la requête pour savoir ce qui se passe -

$result = mysql_query("INSERT INTO coupons (id, retailerName, description, 
       savingsDetails, pictureURL, rating, qrPicture, zipCode, dateAdded, 
       dateExp) VALUES ('$newID', '$retailerName', '$description', 
       '$savingsDetails', '$pictureURL', '0', '$qrPicture', '$zipCode', 
       '$dateAdded', '$dateExp')"); 

if($result) 
{ 
    // Your query succeeded 
} 
else 
{ 
    // Your query failed due to some error 
    die(mysql_error()); 
} 
0

Vous pouvez simplement écrire ce que mysql_query("INSERT INTO coupons (id, retailerName, description, savingsDetails, pictureURL, rating, qrPicture, zipCode, dateAdded, dateExp) VALUES ('$newID', '$retailerName', '$description', '$savingsDetails', '$pictureURL', '0', '$qrPicture', '$zipCode', '$dateAdded', '$dateExp')") or die(mysql_error());

Si vous ne recevez pas une erreur, il Cela signifie qu'il a réussi. Si vous obtenez une erreur, vous obtiendrez une erreur directement de mySQL (donc cela devrait être assez détaillé).

0

Une autre façon de localiser votre problème: consigner votre requête sql, pour voir à quoi ressemble la requête au moment de l'exécution. Ensuite, essayez cette requête directement à votre base de données, vous obtiendrez les choses qui ne vont pas.

Questions connexes