2013-06-17 4 views
0

J'ai une erreur de syntaxe à partir d'une requête MySQL qui me déroute un peu. Autant que je peux voir en ligne ceci semble être la manière correcte de fonctionner et je suis certain que j'ai le nom de table et les variables corrects.Erreur de syntaxe dans la recherche MySQL qui apparaît correcte

Voici donc l'erreur que je reçois;

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 'AND `date` = ORDER BY 'scriptno' ASC' at line 3` 

et est le code ici qui semble être le problème [mais pour autant que je peux voir ce n'est pas ...

$data = mysql_query("SELECT script FROM `tableoscripts` WHERE `event` = $_GET[$eventq] AND `date` = $_GET[$dateq] ORDER BY 'scriptno' ASC") or die ('Error: '.mysql_error()); 

Si vous demandez la page précédente est à la tête de cette l'un utilise la méthode get et les détails apparaissent dans la barre d'adresse après la soumission.

+4

S'il vous plaît ne mettez pas les valeurs de '_GET' $ directement dans les requêtes; vous rendez votre script vulnérable à [injection SQL] (http://php.net/manual/en/security.database.sql-injection.php). – Amber

+1

Avez-vous défini $ eventq? Êtes-vous sûr de ne pas vouloir dire $ _GET ['eventq']? En outre, vous ne devez jamais utiliser l'entrée utilisateur directement. Utilisez PDO/mysqli. Écho la dernière requête pour voir ce que c'est. – Jessica

+1

lorsque j'utilise des valeurs de tableau dans des chaînes, je dois généralement mettre des boucles autour d'eux .... 'date = '{$ _GET [$ dateq]}' ordre par ...' ... et vous devriez essayer de mettre toute la requête une variable et faites un var_dump dessus pour voir ce qui se passe réellement à la chaîne avant d'essayer d'exécuter la requête. assurez-vous que la requête est réellement ce qu'elle devrait être et s'exécute directement dans mysql avant d'exécuter via PHP. –

Répondre

3

Vous devez citer vos valeurs:

...WHERE `event` = '$_GET[$eventq]' AND `date` = '$_GET[$dateq]'... 

Soyez conscient qu'il est dangereux d'utiliser les données utilisateur non filtrés dans les requêtes. Voir http://bobby-tables.com/ pour les informations d'attaque et d'atténuation par injection SQL.

+0

+1. 'ORDER BY 'scriptno' ASC" '-> ici' scriptno' n'a pas besoin d'être entouré de guillemets simples, n'est-ce pas? – Kevin

+1

@kevin Les guillemets simples ne sont pas utiles, les guillemets droits devraient encapsuler les noms de champs: 'ORDER BY \ 'scriptno \' 'pour éviter les conflits avec les mots réservés MySQL. –

2

$_GET[$dateq] est vide/non défini, donc votre requête est brisée à la position indiquée par le message d'erreur.

AND `date` = ORDER BY 
      ^-- Your variable should bere here. 
+1

L'erreur se produit à ''AND' date' = ORDER BY' scriptno 'ASC''. Cela signifie qu'il y a déjà une erreur avant cela. – Kevin

0

De mettre des guillemets autour de vos données?

$data = mysql_query(" 
SELECT script 
FROM `tableoscripts` 
WHERE `event` = '$_GET[$eventq]' 
    AND `date` = '$_GET[$dateq]' 
ORDER BY 'scriptno' ASC") 
or die ('Error: '.mysql_error()); 
0

$_GET[$eventq] et $_GET[$dateq]

devrait probablement

{$_GET['eventq']} et {$_GET['dateq']}.

Et échappez-les tous les deux!

0

Je pense que le problème est avec "date = $ _ Get [$ dateq]" Vous devrez peut-être le convertir au format de date. Dans Oracle, vous pouvez utiliser la fonction to_date(). Je ne suis pas sûr de la fonction équivalente dans MySQL.

0

Si eventq $ et $ DATEQ sont définis que le travail shout suivant

$data = mysql_query("SELECT script FROM `tableoscripts` 
     WHERE `event` = '{$_GET[$eventq]}' AND `date` = '{$_GET[$dateq]'} 
     ORDER BY 'scriptno' ASC") or die ('Error: '.mysql_error());