Projet

Général

Profil

Actions

Anomalie #1219

fermé

Erreur MySQL quand on se rend dans le menu Graphique

Ajouté par Florent Fayolle il y a plus de 5 ans. Mis à jour il y a environ un an.

Statut:
Fermé
Priorité:
Bas
Assigné à:
Catégorie:
Database
Version cible:
Début:
07/12/2018
Echéance:
% réalisé:

100%

Temps estimé:
Version utilisée:

Description

En utilisant MySQL (Oracle, pas mariadb), et en se rendant dans le menu Graphique, nous obtenons l'erreur suivante :

Message: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'galette.galette_cotisations.date_enreg' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
File: /var/www/galette/galette/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Connection.php
Line: 379
Trace: #0 /var/www/galette/galette/vendor/zendframework/zend-db/src/Adapter/Driver/Pdo/Connection.php(379): PDO->query('SELECT date_for...')
#1 /var/www/galette/galette/vendor/zendframework/zend-db/src/Adapter/Adapter.php(205): Zend\Db\Adapter\Driver\Pdo\Connection->execute('SELECT date_for...')
#2 /var/www/galette/galette/lib/Galette/Core/Db.php(777): Zend\Db\Adapter\Adapter->query('SELECT date_for...', 'execute')
#3 /var/www/galette/galette/lib/Galette/IO/Charts.php(374): Galette\Core\Db->execute(Object(Zend\Db\Sql\Select))
#4 /var/www/galette/galette/lib/Galette/IO/Charts.php(101): Galette\IO\Charts->getChartContribsAllTime()
#5 /var/www/galette/galette/lib/Galette/IO/Charts.php(89): Galette\IO\Charts->load()
#6 /var/www/galette/galette/includes/routes/management.routes.php(634): Galette\IO\Charts->__construct(Array)
#7 [internal function]: Closure->{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#8 /var/www/galette/galette/vendor/slim/slim/Slim/Handlers/Strategies/RequestResponse.php(41): call_user_func(Object(Closure), Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#9 /var/www/galette/galette/vendor/slim/slim/Slim/Route.php(335): Slim\Handlers\Strategies\RequestResponse->__invoke(Object(Closure), Object(Slim\Http\Request), Object(Slim\Http\Response), Array)
#10 /var/www/galette/galette/includes/main.inc.php(236): Slim\Route->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#11 [internal function]: Closure->{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\Route))
#12 /var/www/galette/galette/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Closure), Array)
#13 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\Route))
#14 /var/www/galette/galette/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\Route))
#15 /var/www/galette/galette/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\Route->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#16 /var/www/galette/galette/vendor/slim/slim/Slim/Route.php(313): Slim\Route->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#17 /var/www/galette/galette/vendor/slim/slim/Slim/App.php(495): Slim\Route->run(Object(Slim\Http\Request), Object(Slim\Http\Response))
#18 /var/www/galette/galette/vendor/akrabat/rka-slim-session-middleware/RKA/SessionMiddleware.php(47): Slim\App->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response))
#19 [internal function]: RKA\SessionMiddleware->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#20 /var/www/galette/galette/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(RKA\SessionMiddleware), Array)
#21 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#22 /var/www/galette/galette/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Slim\App))
#23 /var/www/galette/galette/includes/main.inc.php(370): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#24 [internal function]: Closure->{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#25 /var/www/galette/galette/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Closure), Array)
#26 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#27 /var/www/galette/galette/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#28 /var/www/galette/galette/includes/main.inc.php(395): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#29 [internal function]: Closure->{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#30 /var/www/galette/galette/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Closure), Array)
#31 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#32 /var/www/galette/galette/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#33 /var/www/galette/galette/includes/main.inc.php(452): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#34 [internal function]: Closure->{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#35 /var/www/galette/galette/vendor/slim/slim/Slim/DeferredCallable.php(43): call_user_func_array(Object(Closure), Array)
#36 [internal function]: Slim\DeferredCallable->__invoke(Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#37 /var/www/galette/galette/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(70): call_user_func(Object(Slim\DeferredCallable), Object(Slim\Http\Request), Object(Slim\Http\Response), Object(Closure))
#38 /var/www/galette/galette/vendor/slim/slim/Slim/MiddlewareAwareTrait.php(117): Slim\App->Slim\{closure}(Object(Slim\Http\Request), Object(Slim\Http\Response))
#39 /var/www/galette/galette/vendor/slim/slim/Slim/App.php(388): Slim\App->callMiddlewareStack(Object(Slim\Http\Request), Object(Slim\Http\Response))
#40 /var/www/galette/galette/vendor/slim/slim/Slim/App.php(296): Slim\App->process(Object(Slim\Http\Request), Object(Slim\Http\Response))
#41 /var/www/galette/galette/includes/main.inc.php(465): Slim\App->run()
#42 /var/www/galette/galette/webroot/index.php(44): require_once('/var/www/galett...')

NB : je doute que notre asso (l'ALDIL) en ait réellement besoin. Le ticket est juste pour tracer l'incident :).


Fichiers

snip_20190416102835.png (41,2 ko) snip_20190416102835.png tri par statut Alain Paris, 16/04/2019 10:31

Demandes liées 2 (0 ouverte2 fermées)

Dupliqué par Galette - Anomalie #1539: GraphiquesRejeté12/02/2021

Actions
Dupliqué par Galette - Anomalie #1667: SQL error on getChartContribsAllTime() with MySQLFerméJohan Cwiklinski23/02/2023

Actions

Mis à jour par Johan Cwiklinski il y a plus de 5 ans

  • Statut changé de Nouveau à Commentaire

De quelle version de MySQL s'agit-il ? (puis bon franchement, vous pourriez utiliser mariadb ou postgreql quand même à l'ALDIL :p).

De mémoire, en 5.7, ils avaient ajouté une configuration qui a ensuite été retirée... MySQL n'a jamais été restrictif, au contraire de PostgreSQL. Pour ce dernier, ce type d'erreur peut effectivement arriver, mais pour le coup, je ne le reproduit pas.

Mis à jour par Florent Fayolle il y a plus de 5 ans

Notre version :

mysqld  Ver 5.7.24-0ubuntu0.18.04.1 for Linux on x86_64 ((Ubuntu))

(puis bon franchement, vous pourriez utiliser mariadb ou postgreql quand même à l'ALDIL :p).

Pataper !

Mis à jour par Johan Cwiklinski il y a plus de 5 ans

  • Catégorie mis à Database
  • Statut changé de Commentaire à Nouveau
  • Priorité changé de Normal à Bas

Mis à jour par Alain Paris il y a environ 5 ans

Bonjour,

Le mode sql_mod only_full_group_by (par défaut depuis MySQL 5.7.5) provoque l'erreur sur "Graphiques" mais également un problème sur la page "members" lors du tri par statut (galette/webroot/members/order/2):

Aucun membre n’a été trouvé.
Les largeurs de colonnes sont modifiées.
Pas de message d'erreur.

Les autres possibilités de tri fonctionnent correctement sur la page "members".

Mis à jour par Johan Cwiklinski il y a presque 4 ans

  • Statut changé de Nouveau à Résolu
  • % réalisé changé de 0 à 100

Mis à jour par Johan Cwiklinski il y a presque 4 ans

  • Statut changé de Résolu à Fermé
  • Assigné à mis à Johan Cwiklinski
  • Version cible mis à 0.9.4

Mis à jour par Alain Paris il y a presque 4 ans

Bonsoir,
Je viens de réessayer en local et en ligne avec PHP 7.3 et MySQL 5.7.19 j'ai toujours une erreur concernant la page "graphiques":

::1 - 2020-06-01 17:35:08 - ERROR - Query error: SELECT date_format(date_enreg, '%Y-%m') AS `date`, SUM(montant_cotis) AS `amount` FROM `galette_cotisations` GROUP BY EXTRACT(YEAR_MONTH FROM date_enreg) ORDER BY `date` ASC 
 PDOException:
 SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'galettenightly.galette_cotisations.date_enreg' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
 in B:\galettenightly\galette\vendor\laminas\laminas-db\src\Adapter\Driver\Pdo\Connection.php:378

::1 - 2020-06-01 17:35:08 - ERROR - Galette error:
Type: PDOException
Code: 42000
Message: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'galettenightly.galette_cotisations.date_enreg' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
File: B:\galettenightly\galette\vendor\laminas\laminas-db\src\Adapter\Driver\Pdo\Connection.php
Line: 378

Sur Wamp en local on peut le contourner en configurant sql-mod sur mode utilisateur

Il me semble que le tri par statut des membres était lui corrigé avant ce commit.

Bonne soirée

Mis à jour par Johan Cwiklinski il y a presque 4 ans

  • Statut changé de Fermé à Commentaire

Alain Paris a écrit (#note-7):

this is incompatible with sql_mode=only_full_group_by

Hum... Étrange, puisque justement c'est censé être désactivé (et que ça semblait fonctionner).

N'ayant pas MySQL, je ne peux pas trop tester. Que donne déjà la requête :

SELECT @@sql_mode

Ensuite, il faudrait lancer :

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

Et lancer une nouvelle fois la première requête (normalement, ce ONLY_FULL_GROUBY devrait être présent la première fois, et avoir disparu la seconde (il semble que ce ne fonctionne pas depuis Galette).

Quant au tri par statut, il ne me semble pas que ça ait changé depuis l'ouverture de ce ticket, si ça a été corrigé, je ne peux expliquer comment :/

Mis à jour par Alain Paris il y a presque 4 ans

Bonjour,

Le problème n'est pas en local ou WAMP permet de modifier la config de MySQL,mais sur un hébergement mutualisé ou l'on ne peut pas retirer "ONLY_FULL_GROUP_BY" de sq_mod, celui-ci n’étant même pas modifiable par l’hébergeur(du moins chez nous a moins de changer d'offre ).

Mis à jour par Johan Cwiklinski il y a presque 4 ans

  • Statut changé de Commentaire à Fermé

Ha ok... Je n'ai pas de solution alors ; c'est un cas particulier.

Mis à jour par Johan Cwiklinski il y a environ 3 ans

Mis à jour par Johan Cwiklinski il y a environ un an

  • Dupliqué par Anomalie #1667: SQL error on getChartContribsAllTime() with MySQL ajouté

Mis à jour par Johan Cwiklinski il y a environ un an

Une solution davantage pérènne a finalement été trouvée ; voir #1667

Actions

Formats disponibles : Atom PDF