2011-03-30 4 views
0

J'ai une requête MySQL très simple, qui fonctionne généralement bien sur mes autres sites, mais cette fois, je reçois l'erreur suivante:MySQL Erreur de syntaxe

Fatal 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 'where id = 1' at line 1 INSERT INTO members (plan, active) VALUES ('3 Days Plan','Y') where id = 1

code est:

$db->query("INSERT INTO members (plan, active) VALUES ('$plan','$active') where id = $custom"); 

I J'utilise la classe mysql rainphp.

Je suis sûr qu'il ya une solution simple, mais je un débutant et juste chiffre cant it out :)

EDIT:

Salut tout le monde,

Merci pour vos réponses! Je me sens comme un idiot maintenant pour ne pas savoir que la clause WHERE est pour UPDATE seulement. Mais ça a du sens de couse!

Merci encore pour l'aide!

+3

Vous ne pouvez pas avoir une clause 'where' sur une instruction' insert' - qu'essayez-vous de faire? – Blorgbeard

Répondre

4

Vous ne pouvez pas insérer et utiliser WHERE en même temps. Cela ne fonctionne que pour UPDATE.

3

Si vous voulez INSERT, utilisez:

$db->query("INSERT INTO members (plan, active) 
    VALUES ('".mysql_real_escape_string($plan)."', 
    '".mysql_real_escape_string($active)."')"); 

La clause WHERE est inutile ici.

EDIT: voulez-vous faire une INSERT ou UPDATE?

Si UPDATE:

$db->query("UPDATE members SET 
    plan = '".mysql_real_escape_string($plan)."', 
    active = '".mysql_real_escape_string($active)."' 
    WHERE id=".intval($id)); 
0

Vous n'avez pas besoin de fournir une clause where sur les instructions d'insertion.

1

Vous ne devez pas utiliser une clause where dans une requête d'insertion.


supprimer cette clause where, de sorte que votre code ressemble à ceci:

$db->query("INSERT INTO members (plan, active) VALUES ('$plan','$active')"); 


Je ne sais pas pourquoi vous mettez cette clause il where; mais si vous voulez modifier certaines données, vous devrez utiliser une requête update - et non une insert.

Par exemple:

update members 
set plan = '$plan', 
    active = '$active' 
where id = $custom 


En sidenote: vous devez vous assurer que vous échapper à vos données - en utilisant la fonction/méthode qui est fournie par votre classe (PDO::quote, par exemple, en cas d'utilisation PDO).

+0

Salut Pascal, j'utilise une petite fonction (fonction safe ($ value) {htmlentities ($ value, ENT_QUOTES, 'utf-8'); return $ value;}) pour m'assurer que toutes les entrées sont vérifiées avant d'être passées à mysql. Cela devrait le faire, non? – Andrej

+1

Non: htmlentities échappe aux données pour la sortie HTML; pas pour la sortie SQL ;; Je devrais ajouter que htmlentities renvoie la chaîne modifiée, et, ici, vous n'utilisez pas sa valeur de retour - donc, fondamentalement, votre fonction ne fait rien. –

+0

oh d'accord. Merci pour l'info. Je vais le changer et m'assurer d'échapper toutes les données avec mysql_real_escape_string. J'espère que cela le fera. – Andrej