Anomalie #1219
closedErreur MySQL quand on se rend dans le menu Graphique
100%
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 :).
Files
Updated by Johan Cwiklinski almost 6 years ago
- Status changed from Nouveau to 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.
Updated by Florent Fayolle almost 6 years ago
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 !
Updated by Johan Cwiklinski almost 6 years ago
- Category set to Database
- Status changed from Commentaire to Nouveau
- Priority changed from Normal to Bas
Updated by Alain Paris over 5 years ago
- File snip_20190416102835.png snip_20190416102835.png added
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".
Updated by Johan Cwiklinski over 4 years ago
- Status changed from Nouveau to Résolu
- % Done changed from 0 to 100
Appliqué par commit 0a9a709e0d63d418abaabea325b1c451ca04969e.
Updated by Johan Cwiklinski over 4 years ago
- Status changed from Résolu to Fermé
- Assignee set to Johan Cwiklinski
- Target version set to 0.9.4
Updated by Alain Paris over 4 years ago
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
Updated by Johan Cwiklinski over 4 years ago
- Status changed from Fermé to 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 :/
Updated by Alain Paris over 4 years ago
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 ).
Updated by Johan Cwiklinski over 4 years ago
- Status changed from Commentaire to Fermé
Ha ok... Je n'ai pas de solution alors ; c'est un cas particulier.
Updated by Johan Cwiklinski over 3 years ago
- Has duplicate Anomalie #1539: Graphiques added
Updated by Johan Cwiklinski over 1 year ago
- Has duplicate Anomalie #1667: SQL error on getChartContribsAllTime() with MySQL added
Updated by Johan Cwiklinski over 1 year ago
Une solution davantage pérènne a finalement été trouvée ; voir #1667