Project

General

Profile

Anomalie #1219

Erreur MySQL quand on se rend dans le menu Graphique

Added by Florent Fayolle almost 2 years ago. Updated 4 months ago.

Status:
Fermé
Priority:
Bas
Category:
Database
Target version:
Start date:
12/07/2018
Due date:
% Done:

100%

Estimated time:
Version utilisée:
Vote:

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

snip_20190416102835.png (41.2 KB) snip_20190416102835.png tri par statut Alain Paris, 04/16/2019 10:31 AM
#1

Updated by Johan Cwiklinski almost 2 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.

#2

Updated by Florent Fayolle almost 2 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 !

#3

Updated by Johan Cwiklinski over 1 year ago

  • Category set to Database
  • Status changed from Commentaire to Nouveau
  • Priority changed from Normal to Bas
#4

Updated by Alain Paris over 1 year ago

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".

#5

Updated by Johan Cwiklinski 4 months ago

  • Status changed from Nouveau to Résolu
  • % Done changed from 0 to 100
#6

Updated by Johan Cwiklinski 4 months ago

  • Status changed from Résolu to Fermé
  • Assignee set to Johan Cwiklinski
  • Target version set to 0.9.4
#7

Updated by Alain Paris 4 months 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

#8

Updated by Johan Cwiklinski 4 months 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 :/

#9

Updated by Alain Paris 4 months 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 ).

#10

Updated by Johan Cwiklinski 4 months ago

  • Status changed from Commentaire to Fermé

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

Also available in: Atom PDF