Logs d’erreurs excessifs sur tables inconnues
Cf: https://discuter.spip.net/t/spip-4-log-base-tables-inconnues/157262/3
Lorque SPIP teste qu’une table de liens est présente ou pas sur un objet éditorial, en utilisant sa fonction objet_associable($objet)
, il appelle par exemple base_trouver_table_dist('spip_rubriques_liens')
Ce faisant cela génère différents logs, dont des erreurs mysql troublantes :
- ecrire/req/mysql.php:L250:spip_mysql_query()::Pub:debug: mysqli_sql_exception: Table 'spip-git.spip_rubriques_liens' doesn't exist
- ecrire/req/mysql.php:L1106:spip_mysql_errno()::Pub:ERREUR: Erreur mysql 1146
- ecrire/req/mysql.php:L1106:spip_mysql_errno()::Pub:ERREUR: Erreur mysql 1146
- ecrire/base/trouver_table.php:L157:base_trouver_table_dist()::Pub:!INFO: trouver_table: table inconnue '' 'spip_rubriques_liens'
- ecrire/action/editer_liens.php:L63:objet_associable()::Pub:info: Objet rubrique non associable : ne dispose pas d'une cle primaire id_rubrique OU d'une table liens spip_rubriques_liens
Là dedans, les erreurs Mysql sont fallacieuses.
En fait, on passe dans la fonction trouver table dans :
if (!isset($connexion['tables'][$nom_sql])) {
// La *vraie* base a la priorite
$desc = sql_showtable($nom_sql, $table_spip, $serveur);
Du coup, on demande un show create table X
d’une table qui n’existe pas et mysql râle.
À cet endroit, je pense qu’il faudrait ajouter une condition qui vérifie que la table existe bien avant d’appeler sql_showtable.
Soit en s’appuyant sur sql_alltables(), soit avec une nouvelle fonction, tel que sql_table_exists('spip_rubriques_liens')
qui retournerait l’équivalent de :
# mysql
show tables like 'spip_rubriques_liens';
# sqlite
SELECT name FROM sqlite_master WHERE type='table' AND name='spip_rubriques_liens';