2010-08-05 4 views
0

Voici mon code:Erreur lors de l'insertion dans la table SQL avec PHP

function function() { 
$isbn = $_REQUEST["isbn"]; 
$price = $_REQUEST["price"]; 
$cond = $_REQUEST["cond"]; 

$con = mysql_connect("localhost","my_usernam", "password"); 
if (!$con) die('Could not connect:' . mysql_error()); 
mysql_select_db("my_database",$con); 

$sql="INSERT INTO 'Books' (isbn, price, condition) 
VALUES ('$isbn','$price','$cond')"; 


if (!mysql_query($sql,$con)) 
{ 
die('Error: ' . mysql_error()); 
} 

mysql_close($con); 
return "It works"; 

Mais quand exécuter résulte:

Error: 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 ''Books' (isbn, price....

Quelqu'un sait pourquoi cela se passe?

+0

Si vous avez une erreur SQL, la meilleure approche est généralement à la sortie de la requête que vous essayez d'exécuter et essayer « sec » dans un Une feuille de calcul SQL (telle que celle de phpMyAdmin); Si cela ne fonctionne pas non plus, votre problème est dans le domaine SQL et vous pouvez ignorer le PHP et les problèmes de connexion qui obscurcissent le problème. – lotsoffreetime

Répondre

0

noms de table envelopper dans des accents graves, pas de guillemets, et assurez-vous d'échapper à votre entrée pour la sécurité:

$sql="INSERT INTO `Books` (`isbn`, `price`, `condition`) 
VALUES ('" . mysql_real_escape_string($isbn) . "', 
     '" . mysql_real_escape_string($price) . "', 
     '" . mysql_real_escape_string($cond) . "')"; 
+0

Désolé, je ne sais pas ce que vous voulez dire – Jake

+0

J'ai ajouté du code pour vous montrer. –

+0

et maintenant prier que "condition" ne deviendra jamais un mot-clé réservé dans mysql ;-) – mvds

3

Vous devez utiliser des apostrophes inverses au lieu de guillemets simples pour les noms de table et sur le terrain:

$sql="INSERT INTO `Books` (`isbn`, `price`, `condition`) 
    VALUES ('$isbn','$price','$cond')"; 

fonctionnera.

ps. pour éviter toutes sortes de failles de sécurité désagréables, échapper aux champs de saisie avec:

$isbn = mysql_real_escape_string($_REQUEST["isbn"]); 
// etc etc for all fields 
+0

Génial, merci mvds! :) – Jake

+1

Notez que vous ne pourrez pas utiliser mysql_real_escape_string() tant que la connexion à la base de données n'aura pas été établie. –

+0

Excellent point Scott – mvds

Questions connexes