MySQL 5.7.14 introduit un changement susceptible de provoquer vos requêtes existantes échouer avec l'erreur "SQLSTATE[42000] : erreur de syntaxe ou violation d'accès : 1140 dans une requête agrégée sans GROUP BY." Cette erreur se produit lorsque vous agrégez une colonne (par exemple, COUNT()) dans la clause SELECT mais n'incluez pas de colonnes non agrégées dans la clause GROUP BY.
Dans les versions antérieures de MySQL, l'agrégation de colonnes sans utiliser de GROUP BY était autorisée. Cependant, pour garantir l'intégrité des données, MySQL 5.7.5 et les versions ultérieures appliquent un mode SQL "strict" ou "only_full_group_by", qui nécessite que toutes les colonnes non agrégées soient incluses dans la clause GROUP BY.
< h3>Options de solution
Vous disposez de deux options pour résoudre ce problème :
Vous pouvez modifier la configuration de MySQL pour adopter par défaut le comportement hérité qui autorise les colonnes non agrégées en dehors de la clause GROUP BY. Ceci n'est pas recommandé car cela va à l'encontre des meilleures pratiques de l'industrie et peut conduire à des résultats incorrects.
Modifiez votre requête pour inclure les colonnes non agrégées dans la clause GROUP BY. Par exemple :
<code class="sql">SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1</code>
Notez que l'exclusion des colonnes non agrégées de la clause GROUP BY est toujours autorisée dans MySQL 5.7.5. et versions ultérieures si la colonne non agrégée est limitée à une seule valeur. Par exemple, un filtre dans la clause WHERE limiterait la colonne à une seule ligne, ce qui permettrait de l'exclure en toute sécurité de la clause GROUP BY.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!