2009-05-30 7 views
-1
if ($_POST) {$content = stripslashes($_POST['content']); 
    $by = $_SESSION['exp_user']['username']; 
    $dt = date("F j, Y, g:i a"); 
    mysql_query("UPDATE tbl_intmsg SET time = ".$dt.", by = ".$by." AND content = ".$content."") or die(mysql_error()); 

Pour que je reçois l'erreur:PHP + MySQL Erreur

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 '26, 2009, 2:28 pm, by = shamil.nunhuck AND content = Test message! ' at line 1

Toutes les idées?

+1

Des erreurs comme celle-ci sont plus faciles à résoudre si vous examinez la chaîne SQL résultante, pas le code qui produit cette chaîne. –

Répondre

1

Ah ferraille que, voici la réponse:

$db = mysql_query("UPDATE `tbl_intmsg` SET `time` = '".$dt."', `by` = '".$by."', `content` = '".$content."'"); 
+0

-1 pour répondre en utilisant le code SQL-injectable – Johan

+0

Comment est-ce que SQL injectable? Si vous allez downvote, donnez-moi au moins plus. EDIT: J'ai supprimé l'échappement parce que j'utilise une classe personnalisée pour le faire. – bear

+0

'$ content' vient de' $ _POST ['content'] 'sans échapper, les classes personnalisées pour l'échappement sont une recette pour un désastre. Utilisez 'mysql_real_escape_string()' et rien d'autre. – Johan

1

mettre des guillemets SQL autour de vos variables de chaîne:

UPDATE tbl_intmsg SET time = \"".$dt."\", by = \"".$by."\" AND content = \"".$content."\" 
3

Ouais SQL ressemble à ceci quand il est lu par le serveur MySQL:

UPDATE tbl_intmsg SET time = 26, 2009, 2:28 pm, by = shamil.nunhuck 
    AND content = Test message! 

Comment MySQL est de savoir ce qui est quoi dans cette déclaration? Imaginez, par exemple, que vous définissiez votre contenu $ sur "0 WHERE dummy = true". Alors votre SQL ressemblerait à ceci:

UPDATE tbl_intmsg SET time = 26, 2009, 2:28 pm, by = shamil.nunhuck 
    AND content = 0 WHERE dummy = true 

Voyez-vous le problème? Comment SQL peut-il déterminer quelles sont vos données et quels sont les mots-clés SQL?

La réponse est: citations!

Votre SQL devrait ressembler à ceci:

UPDATE tbl_intmsg SET time = '26, 2009, 2:28 pm', by = 'shamil.nunhuck' 
    AND content = 'Test message!' 

Votre PHP chaîne requête SQL pourrait ressembler à ceci:

$q="UPDATE tbl_intmsg SET time = '$dt', by = '$by' AND content = '$content'"; 

(Notez que PHP parse chaînes guillemets doubles pour les variables et les remplace Notez également que vous devez utiliser la fonction mentionnée ci-dessus

mysql_real_escape_string($var) 

pour désinfecter vos données avant de les mettre dans MySQL. Voici le lien que mechler n'a pas pu poster: php.net/mysql-real-escape-string)

Cheers!

/0