You are not logged in.
Bonjour,
Nous avons fait une migration d'un GLPI 9.5.9 (Ubuntu 20.0.4 LTS) à un GLPI 10.0.3 (Ubuntu 22.0.4 LTS, apache 2.4.52, php 8.1.2, mysql 8.0.32).
Nous n'avons rencontré aucune erreur lors des 2 mises à jours. (Système + GLPI)
Seulement, depuis nous rencontrons un bug assez problématique.
Nous ne pouvons plus associé un PC à un ticket. Quand nous le faisons, aprés avoir cliquez sur le bouton "Sauvegarder", nous avons droit à un écran blanc. Si a ce moment la nous faisons un F5 sur l'URL alors, la modification n'a pas été prise en compte du tout.
L’erreur SQL dans le fichier sql-errors.log (quand on fait le refresh sur l’URL)
*** MySQL query error:
SQL: SELECT COUNT(*) AS cpt FROM `glpi_items_tickets` INNER JOIN `glpi_tickets` ON (`glpi_items_tickets`.`tickets_id` = `glpi_tickets`.`id`) WHERE `itemtype` = 'Ticket' AND `items_id` = '101112' AND `is_deleted` = '0'
Error: Column 'itemtype' in where clause is ambiguous
Backtrace :
src/DBmysqlIterator.php:110
src/DBmysql.php:1048 DBmysqlIterator->execute()
src/DbUtils.php:486 DBmysql->request()
inc/db.function.php:192 DbUtils->countElementsInTable()
src/Ticket.php:782 countElementsInTable()
src/CommonGLPI.php:382 Ticket->getTabNameForItem()
src/Ticket.php:894 CommonGLPI->addStandardTab()
src/CommonGLPI.php:332 Ticket->defineTabs()
src/Toolbox.php:3522 CommonGLPI->defineAllTabs()
ajax/updatecurrenttab.php:46 Toolbox::getAvailablesTabs()
{"user":"20947@dtcsrvglpi"}
L’erreur SQL dans le fichier php-errors.log aprés avoir cliqué sur le bouton sauvegarder. (erreur qui apparait dans la feuille blanche quand je mets en place le debug.)
[2023-01-31 12:28:23] glpiphplog.CRITICAL: *** Uncaught Exception TypeError: Glpi\Toolbox\Sanitizer::isNsClassOrCallableIdentifier(): Argument #1 ($value) must be of type string, array given, called in /var/www/html/glpi/src/DBmysql.php on line 1257 in /var/www/html/glpi/src/Toolbox/Sanitizer.php at line 224
Backtrace :
src/DBmysql.php:1257 Glpi\Toolbox\Sanitizer::isNsClassOrCallableIdentifier()
src/DBmysql.php:1396 DBmysql::quoteValue()
src/DBmysql.php:1430 DBmysql->buildUpdate()
src/CommonDBTM.php:672 DBmysql->update()
src/CommonDBTM.php:1675 CommonDBTM->updateInDB()
front/ticket.form.php:84 CommonDBTM->update()
Auriez vous une idée svp ?
Merci.
Last edited by utilisateurUGMR (2023-02-01 12:08:08)
Offline
Bonjour,
le problème a été solutionné.
1) lancer la commande suivante : php bin/console db:check_schema_integrity
2) Faire les corrections :
Exemple : vous obtenez
Le schéma diffère pour la table "glpi_tickets".
--- Schéma de base de données attendu
+++ Schéma de base de données actuel
@@ @@
`internal_time_to_own` datetime,
`internal_time_to_resolve` datetime,
`is_deleted` tinyint NOT NULL DEFAULT 0,
+ `items_id` int NOT NULL DEFAULT 0,
+ `itemtype` varchar(100) NOT NULL,
`itilcategories_id` int NOT NULL DEFAULT 0,
`locations_id` int NOT NULL DEFAULT 0,
`name` varchar(255),
@@ @@
KEY `date_creation` (`date_creation`),
KEY `date_mod` (`date_mod`),
KEY `date` (`date`),
+ KEY `due_date` (`time_to_resolve`),
KEY `entities_id` (`entities_id`),
KEY `global_validation` (`global_validation`),
KEY `impact` (`impact`),
@@ @@
KEY `internal_time_to_own` (`internal_time_to_own`),
KEY `internal_time_to_resolve` (`internal_time_to_resolve`),
KEY `is_deleted` (`is_deleted`),
+ KEY `item` (`itemtype`,`items_id`),
KEY `itilcategories_id` (`itilcategories_id`),
KEY `locations_id` (`locations_id`),
KEY `name` (`name`),
@@ @@
KEY `solvedate` (`solvedate`),
KEY `status` (`status`),
KEY `time_to_own` (`time_to_own`),
- KEY `time_to_resolve` (`time_to_resolve`),
KEY `type` (`type`),
KEY `urgency` (`urgency`),
KEY `users_id_lastupdater` (`users_id_lastupdater`),
KEY `users_id_recipient` (`users_id_recipient`)
solution :
a) Pour chaque + devant une ligne, il faudra supprimer l'élèment. Ca peut etre une colonne, une clé etc...
b) Pour chaque - devant une ligne, il faudra créér l'élèment. Ca peut etre une colonne, une clé etc...
Voici ce qu'il fallait faire pour la table.
alter table glpi_tickets add KEY `time_to_resolve` (`time_to_resolve`);
alter table glpi_tickets drop KEY `item`;
alter table glpi_tickets drop KEY `due_date`;
alter table glpi_tickets drop column items_id;
alter table glpi_tickets drop column itemtype;
Offline
le problème venait donc du schema qui n'était plus en adéquation avec le code.
Offline