Mysql 8.0.15

Vous avez une question sur l'installation ou le paramétrage d'Agora-project ?
Répondre
fdeblaye
Messages : 5
Inscription : 19 janv. 2018, 15:24

Mysql 8.0.15

Message par fdeblaye »

Bonjour a tous,

je tente la migration de mon espace (dernière version) sur un nouveau serveur IIS équipé de mysql 8.0.15 et j'ai le droit à un joli message d'erreur:

internal error :

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 in C:\inetpub\wwwroot\CISPD\app\Common\Db.php:57 Stack trace: #0 C:\inetpub\wwwroot\CISPD\app\Common\Db.php(57): PDO->query('SELECT * FROM a...') #1 C:\inetpub\wwwroot\CISPD\app\ModSpace\MdlSpace.php(71): Db::getTab('SELECT * FROM a...') #2 C:\inetpub\wwwroot\CISPD\app\Common\Ctrl.php(346): MdlSpace->moduleList() #3 C:\inetpub\wwwroot\CISPD\app\Common\Ctrl.php(68): Ctrl::curSpaceSelection() #4 C:\inetpub\wwwroot\CISPD\app\Common\Req.php(58): Ctrl::initCtrl() #5 C:\inetpub\wwwroot\CISPD\index.php(10): Req->__construct() #6 {main}

[Back]

je n'ai aucun log d'erreur php. Avez-vous une piste d'étude à me conseiller ?

Merci beaucoup.
fdeblaye
Messages : 5
Inscription : 19 janv. 2018, 15:24

Re: Mysql 8.0.15

Message par fdeblaye »

Bonjour à tous,

je viens de faire une installation toute propre sur mon nouveau serveur. L'installation se passe bien, les tables sont bien créées dans mysql. Lorsque je vais sur le site, j'ai bien la page de connexion mais j'ai toujours le message d'erreur après l'authentification.

Pour info, je suis sous PHP Version 7.3.2.
xech
Administrateur du site
Messages : 1377
Inscription : 17 janv. 2008, 20:58

Re: Mysql 8.0.15

Message par xech »

Bonjour,
Votre configuration semble assez spécifique, avec un serveur web Microsoft IIS et la toute dernière version de Mysql (préférez désormais MariaDB). Par conséquent il nous sera difficile de détecter l'origine de l'erreur, sans avoir de plus amples informations. Par ailleurs, est-ce que les tables ont bien été pré-remplies : notamment les tables "ap_joinSpaceModule" et "ap_space" ? Enfin, il serait préférable d'utiliser "XAMPP" si vous souhaitez utiliser Agora-Project sur un système d'exploitation Windows.
cordialement
xech
fdeblaye
Messages : 5
Inscription : 19 janv. 2018, 15:24

Re: Mysql 8.0.15

Message par fdeblaye »

J'ai suivi votre conseil et migrer la BDD vers Mariadb. Le transfert a parfaitement fonctionné.
Merci
sam855
Messages : 7
Inscription : 03 avr. 2020, 15:03

Re: Mysql 8.0.15

Message par sam855 »

Bonjour,

Nous avons exactement le même problème. Nous venons d'installer Agora Project sur FreeBSD et Mysql 8.0.16. Nous avons donné tous les privilèges à l'utilisateur mysql sur la base de donnée avec GRANT ALL PRIVILEGES. L'installation se passe bien, les tables sont correctement créées et nous pouvons voir que l'utilisateur admin est correctement ajouté à la table ap_user. Toutefois, lorsque nous tentons de nous connecter après l'installation nous obtenons le message d'erreur suivant:

Code : Tout sélectionner

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1 in /s/usr-local/www/my-website-live/app/Common/Db.php:58 Stack trace: #0 /s/usr-local/www/my-website-live/app/Common/Db.php(58): PDO->query('SELECT * FROM a...') #1 /s/usr-local/www/my-website-live/app/ModSpace/MdlSpace.php(70): Db::getTab('SELECT * FROM a...') #2 /s/usr-local/www/my-website-live/app/Common/Ctrl.php(338): MdlSpace->moduleList() #3 /s/usr-local/www/my-website-live/app/Common/Ctrl.php(68): Ctrl::curSpaceSelection() #4 /s/usr-local/www/my-website-live/app/Common/Req.php(60): Ctrl::initCtrl() #5 /s/usr-local/www/my-website-live/index.php(10): Req->__construct() #6 {main}
En ajoutant un echo() dans la fonction correspondante pour inspecter la requête nous pouvons voir que la requête qui échoue est:

Code : Tout sélectionner

SELECT * FROM ap_joinSpaceModule WHERE _idSpace=1 ORDER BY rank
Il s'agit d'une installation vierge et non d'une migration. Nous n'avons aucune expérience avec Agora, c'est la première fois que nous l'utilisons. Nous espérons que quelqu'un verra ce message rapidement autrement nous serons obligés de nous tourner vers un autre logiciel en raison de contraintes de temps (ce qui serait dommage car il s'agit d'une demonstration pour une grande organisation).

Merci beaucoup
xech
Administrateur du site
Messages : 1377
Inscription : 17 janv. 2008, 20:58

Re: Mysql 8.0.15

Message par xech »

Bonjour,
Vous pouvez essayer de corriger cela en modifiant la ligne 65 du fichier "/app/ModDashboard/MdlDashboardPoll.php" et la ligne 70 du fichier "/app/modSpace/MdlSpace.php". Pour cela, ajoutez "ASC" à la fin des requêtes :

Code : Tout sélectionner

....ORDER BY rank ASC
Cdlt
Xech
sam855
Messages : 7
Inscription : 03 avr. 2020, 15:03

Re: Mysql 8.0.15

Message par sam855 »

Merci beaucoup pour votre réponse rapide, nous avons implementé votre suggestion mais malheureusement nous obtenons toujours une erreur de syntaxe, pour le moins étrange car il s'agit à priori de SQL valide. Le message d'erreur est le suivant:

Code : Tout sélectionner

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC' at line 1 in /s/usr-local/www/my-website-live/app/Common/Db.php:58 Stack trace: #0 /s/usr-local/www/my-website-live/app/Common/Db.php(58): PDO->query('SELECT * FROM a...') #1 /s/usr-local/www/my-website-live/app/ModSpace/MdlSpace.php(70): Db::getTab('SELECT * FROM a...') #2 /s/usr-local/www/my-website-live/app/Common/Ctrl.php(338): MdlSpace->moduleList() #3 /s/usr-local/www/my-website-live/app/Common/Ctrl.php(68): Ctrl::curSpaceSelection() #4 /s/usr-local/www/my-website-live/app/Common/Req.php(60): Ctrl::initCtrl() #5 /s/usr-local/www/my-website-live/index.php(10): Req->__construct() #6 {main}
Et la requête inspectée dans Db.php est:

Code : Tout sélectionner

SELECT * FROM ap_joinSpaceModule WHERE _idSpace=1 ORDER BY rank ASC
Au cas où cela est utile, voici les tables ayant été crées par l'installateur:

Code : Tout sélectionner

+------------------------------+
| Tables_in_my_database     |
+------------------------------+
| ap_agora                     |
| ap_calendar                  |
| ap_calendarevent             |
| ap_calendareventaffectation  |
| ap_calendareventcategory     |
| ap_contact                   |
| ap_contactfolder             |
| ap_dashboardnews             |
| ap_dashboardpoll             |
| ap_dashboardpollresponse     |
| ap_dashboardpollresponsevote |
| ap_file                      |
| ap_filefolder                |
| ap_fileversion               |
| ap_forummessage              |
| ap_forumsubject              |
| ap_forumtheme                |
| ap_invitation                |
| ap_joinspacemodule           |
| ap_joinspaceuser             |
| ap_link                      |
| ap_linkfolder                |
| ap_log                       |
| ap_mailhistory               |
| ap_objectattachedfile        |
| ap_objectcomment             |
| ap_objectlike                |
| ap_objecttarget              |
| ap_space                     |
| ap_task                      |
| ap_taskfolder                |
| ap_user                      |
| ap_usergroup                 |
| ap_userinscription           |
| ap_userlivecouter            |
| ap_usermessenger             |
| ap_usermessengermessage      |
| ap_userpreference            |
+------------------------------+
Par ailleurs, la table ap_joinspacemodule est vide, cela est-il normal?
xech
Administrateur du site
Messages : 1377
Inscription : 17 janv. 2008, 20:58

Re: Mysql 8.0.15

Message par xech »

Oui effectivement c'est assez bizarre, d'autant que le nom des tables apparaissent en minuscule. Normalement la table devrait être nommée "ap_joinSpaceModule" (avec des majuscules, en "camelCase") et surtout elle ne devrait pas être vide juste après l'installation (cf. fichier SQL en pièce jointe). Avez-vous regardé dans les logs d'erreur de Mysql et dans le paramétrage du /etc/mysql/my.cnf s'il n'y a pas un paramétrage à faire au niveau des requêtes SQL ou sur la gestion des erreurs? Sinon comme indiqué plus haut, il est désormais conseillé d'utiliser plutôt MariaDB, la version désormais la plus rependue de Mysql (un Fork), qui est mieux prise en charge sur les distributions Debian, Ubuntu, etc.. cela depuis qu'ORACLE a racheté les entreprises Sun et MySql : une grosse multinationale en somme, avec d'autres priorités que le logiciel libre...
Cordialement
Xech
Pièces jointes
db.zip
(3.14 Kio) Téléchargé 896 fois
sam855
Messages : 7
Inscription : 03 avr. 2020, 15:03

Re: Mysql 8.0.15

Message par sam855 »

Bonjour,

Je vous remercie pour votre temps et vos conseils. Nous allons chercher a diagnostiquer dans cette direction, toutefois afin de determiner si le fait d'utiliser MariaDB est envisageable pour nous: nous avons d'autres applications utilisant MySQL et nous ne pouvons pas nous lancer dans des projets de migrations bien que MariaDB doit presenté comme un drop-in replacement, le travail de preparation reste consequent.

MySQL et MariaDB devront donc cohabiter sur nos systemes, ainsi l'installateur de Agora permet t-il de specifier un port different du port par defaut de MySQL? Par exemple en specifiant "localhost:<port_instance_mariadb>" comme adresse du serveur. Cette syntaxe fonctionnera t-elle? Cela nous permettra d'avoir MySQL et MariaDB cote a cote.

Nous vous remercions,
xech
Administrateur du site
Messages : 1377
Inscription : 17 janv. 2008, 20:58

Re: Mysql 8.0.15

Message par xech »

Oui il est tout à fait possible de faire cohabiter MySQL et MariaDb en leur spécifiant des ports différents :
https://mariadb.com/kb/en/installing-ma ... ide-mysql/
En ce qui concerne le paramétrage d'Agora-Project, il faudra simplement modifier la ligne 30 du fichier "/app/Common/Db.php" en spécifiant le numéro de port de MariaDB (5555 dans l'exemple suivant) :

Code : Tout sélectionner

{self::$_objPDO=new PDO("mysql:host=".db_host.";port=5555;dbname=".db_name.";charset=utf8", db_login, db_password, array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));}
Bien à vous
sam855
Messages : 7
Inscription : 03 avr. 2020, 15:03

Re: Mysql 8.0.15

Message par sam855 »

Merci pour votre aide, nous avons installé MariaDB et le problème n'est pas réapparu.
SylScat
Messages : 4
Inscription : 21 oct. 2020, 12:25

Re: Mysql 8.0.15

Message par SylScat »

Bonjour,

J'ai eu le même problème sur une installe "neuve" et apparemment, cela viendrait du mot "rank" qui est n'est pas accepté car c'est une fonction SQL.
n'ayant pas lu votre file de discussion, j'ai changé le champ "rank" dans les tables par "ranks" ainsi que dans les requêtes et tout passe maintenant.
SylScat
Messages : 4
Inscription : 21 oct. 2020, 12:25

Re: Mysql 8.0.15

Message par SylScat »

En fait, en testant le logiciel Agora, je me rends compte que j'ai souvent ce même type d'erreur (idem pour la mise a jour de la fiche d'un utilisateur par exemple) qui utilise aussi des "mots clés" de mySQL (function par exemple). Pour régler le problème, il faut ajouter des " ` " autours des noms de champs.

comme dans :
$sqlProperties="`civility`=".Db::formatParam("civility").", `name`=".Db::formatParam("name").", `firstName`=".Db::formatParam("firstName").", `mail`=".Db::formatParam("mail").", `telephone`=".Db::formatParam("telephone").", `telmobile`=".Db::formatParam("telmobile").", `adress`=".Db::formatParam("adress").", `postalCode`=".Db::formatParam("postalCode").", `city`=".Db::formatParam("city").", `country`=".Db::formatParam("country").", `function`=".Db::formatParam("function").", `companyOrganization`=".Db::formatParam("companyOrganization").", `comment`=".Db::formatParam("comment").", `connectionSpace`=".Db::formatParam("connectionSpace").", `lang`=".Db::formatParam("lang");

https://dev.mysql.com/doc/refman/8.0/en ... ution.html

Je n'aime pas corriger du code source comme ça mais bon pas le choix...
xech
Administrateur du site
Messages : 1377
Inscription : 17 janv. 2008, 20:58

Re: Mysql 8.0.15

Message par xech »

Bonjour à tous,

Effectivement sur les dernières version de Mysql, certains nom de champs peuvent interférer avec certains mots réservés de MySQL ('login', 'rank', 'password', etc). Notez que ça ne pose aucun soucis sur d'anciennes version de MySQL et sur toutes les versions de MariaDB : qui arrivent bien à différencier les noms de champs des mots réservés.

Pour finir, la nouvelle version 3.7.3 corrige ce soucis de mots réservés.

Cordialement
Xech
Répondre