PhpMyAdmin error #1064

Par Huggy, il y a 9 ans


Base de données MySQL

Bonjour à tous,

Voila je rencontre un petit problème avec phpMyAdmin dans la fenêtre SQL.
la requête échoue lorsqu'il y a un critère litéral avec des quotes.

Ce que je fais

Voici ma config : Ubuntu, phpMyadmin 4.6.3, nginx 1.10, php 7.01, MySQL 5.7

select * from tags where title='fruits' MySQL a répondu: #1064 - Erreur de syntaxe près de '& LIMIT 0, 25' à la ligne 1

il semble que les apostrophes soient converties en entités html &#039
d'où le "prés &"

Si vous avez déjà eu ce problème, merci de m'apporter vos lumières

Merci

7 réponses

Huggy, il y a 9 ans

Il y a un déjà un pb lorsque dans la fenêtre SQL, on clique sur le bouton Format
celui-ci affiche une requête foireuse

SELECT * FROM tags WHERE title = 'fruits';

ce bouton lance une requête ajax vers db_sql_format.php
le résultat retourné contient des &#039 à la place des quotes

Huggy, il y a 9 ans

Je ne pense pas que ce soit le LIMIT 0, 25 car si je met mon propre LIMIT c'est pareil
la requête en erreur retournée :

select * from tags where title=& LIMIT 0, 25 MySQL a répondu: #1064 - Erreur de syntaxe près de '& LIMIT 0, 25' à la ligne 1

ce qui me fait penser que ça coince juste après le =
si je fais

select * from tags where id=1

aucun problème

Si j'examine la requête ajax transmise, j'ai ça

sql_query :"select+*+from+tags+where+title='fruits'"

ce qui me semble correct (j'obtiens la même chose sur un poste qui fonctionne)

tleb, il y a 9 ans

Et ça donne quoi avec " ou ` ?

Huggy, il y a 9 ans

ni les guillemets ni les accent grave sont reconnus pour encadrer un litéral

#1064 - Erreur de syntaxe près de '&quot LIMIT 0, 25' à la ligne 1 #1054 - Champ fruit inconnu dans where clause
tleb, il y a 9 ans

Salut,

Pour le "près de &", je pense que c'est parce que phpmyadmin modifie ta requête et y ajoute & LIMIT 0, 25 parce qu'il pagine.

Tu as essayé avec des " ou des ` ?

tleb, il y a 9 ans

Ce qui est bizarre sur l'erreur avec les ", c'est que c'est le second qui semble poser problème, et non le premier. Sinon, on aurait une erreur de syntaxe près de &quotfruits&quot LIMIT 0, 25.

Huggy, il y a 9 ans

Bon j'avance doucement
j'ai pointé la source du problème sans vraiment pouvoir le résoudre
En fait phpmyadmin n'y est pour rien, c'est php qui déconne
le problème vient du comportement de la variable $_POST qui est censée de désencoder les entitiés html mais qui ne le fait ici que partiellement.
un exemple tout bête : l'envoi par formulaire d'une valeur contenant une apostrophe encodée
j'ai mis 2 encodages différents de l'apostrophe &#39 et &apos

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>test html entities</title> </head> <body> <form action="do.php" method="post"> <input type="text" name="valeur" value="&#39;coucou&apos;"> <input type="submit" value="OK"> </form> </body> </html>

voici le fichier qui reçoit la valeur

<?php echo $_REQUEST['valeur']; /// ne désencode pas echo "<br />"; echo $_POST['valeur']; // ne désencode pas echo "<br />"; echo filter_input(INPUT_POST, 'valeur'); // ok désencode ?>

le résultat de ces trois sorties vu en affichant la source de la page

&#039;coucou&#039;<br />&#039;coucou&#039;<br />'coucou'

les 2 premières contiennent toujours des entités html et en plus le &apos est converti en &#39
normalement on devrait avoir

'coucou'<br />'coucou'<br />'coucou'

Si quelqu'un a une explication ou connait la variable magique qui gère ce comportement, je suis preneur

Pour résoudre mon problème avec phpMyAdmin j'ai salement rajouté un html_entity_decode dans le fichier import.php ligne 114

if (! empty($sql_query)) { $sql_query = html_entity_decode($sql_query,ENT_QUOTES); // <<< hack ...