Erreur 0 de mysql

En consultant les logs du site, je remarque la présence de plusieurs fichiers mysql.log, log.1, log.2 rapprochés (= ils sont séparés d’à peine une semaine chacun) qui contiennent tous la même erreur.

2025-05-08 13:40:47 54.197.114.76 (pid 2275853) :Pub:ERREUR: Erreur 0 de mysql: 
in /home/rqvknesp/public_html/ecrire/src/Compilateur/Iterateur/Sql.php L93 [sql_seek(),seek(),seek(),BOUCLE_documents_portfoliohtml_13456caf1787571873f2a053e2ba2a98(),html_13456caf1787571873f2a053e2ba2a98(),public_parametrer_dist(),public_produire_page_dist(),inclure_page(),evaluer_fond(),recuperer_fond(),eval(),include(),evaluer_fond(),recuperer_fond(),eval(),include(),evaluer_fond(),recuperer_fond(),eval(),include(),evaluer_fond(),recuperer_fond(),eval(),include(),evaluer_fond(),recuperer_fond(),eval(),include(),include()]
SELECT COUNT(DISTINCT documents.id_document)
FROM `rqvknesp_rda`.spip_documents AS `documents`  
INNER JOIN `rqvknesp_rda`.spip_documents_liens AS L2 ON ( L2.id_document = documents.id_document ) 
INNER JOIN `rqvknesp_rda`.spip_documents_liens AS L1 ON ( L1.id_document = documents.id_document )
WHERE (documents.statut = 'publie')
	AND (documents.taille > 0 OR documents.distant='oui')
	AND (L2.id_objet = 36)
	AND (L2.objet = 'article')
	AND (documents.mode = 'document')
	AND (documents.extension  IN ('png','jpg','gif'))
	AND (L1.vu = 'non')

Quelle est cette erreur et quelle est la conduite à tenir pour la corriger ?

Bonsoir,

Quel est le code de la boucle

BOUCLE_documents_portfolio
[(#REM) Portfolio : album d'images ]
<B_documents_portfolio>

	[(#REM) Selection du bloc-grid en fonction de la version de Foundation ]
	#ANCRE_PAGINATION
	<div id="documents_portfolio" class="row small-up-2 medium-up-3 large-up-4">
		<BOUCLE_documents_portfolio(DOCUMENTS){id_rubrique ?}{id_article ?}{id_produit ?}{mode=document}{extension IN png,jpg,gif}{par num titre, date}{vu=non}{pagination 20}>
			<div class="column">
				[<a href="[(#URL_DOCUMENT)]" type="#MIME_TYPE" rel="documents_portfolio[-a(#ID_ARTICLE)]"[ title="(#TITRE|attribut_html|couper{80})"]>
				(#FICHIER
				|image_passe_partout{200, 200}
				|image_recadre{200,200,center}
				|inserer_attribut{alt,[(#TITRE|attribut_html|couper{80})]}
				|inserer_attribut{class,thumbnail})
				</a>]
			</div>
		</BOUCLE_documents_portfolio>
	</div>
	[<nav class="pagination">(#PAGINATION{foundation})</nav>]
</B_documents_portfolio>

En dirait le code de base dans le plugins foundation ?

Dans le premier message, on parle du fichier

html_13456caf1787571873f2a053e2ba2a98

il devrait donner plus d’information si vous cherchez dedans la bonne ligne.

Après il faudrait voir la version de SPIP et de php

Alors, SPIP 4.3.8 - PHP : 8.1.
Oui, la boucle documents_portfolio st bien issue de zoundation et on retrouve bien l’identifiant de la boucle dans le message d’erreur (BOUCLE_documents_portfolio)
Concernant le fichier, html_13456caf1787571873f2a053e2ba2a98, je suppose que c’est un fichier de cache. J’ai cherché dans tmp/cache et je ne l’ai pas vu.

Si tu reprends les logs mysql il te donne quel fichier de log et ensuite remonte de fichier pour trouver les infos

OK, j’ai mis la main sur le fichier tmp/cache/skel/html_13456caf1787571873f2a053e2ba2a98.php concerné. Je voulais le mettre en PJ, mais a priori, on ne peut joindre que des fichiers image… Alors, ci-dessous le contenu

<?php

/*
 * Squelette : plugins/auto/zoundation/v1.1.0/inclure/inc-portfolio.html
 * Date :      Fri, 05 Jul 2024 16:33:50 GMT
 * Compile :   Sun, 11 May 2025 12:48:19 GMT
 * Boucles :   _documents_portfolio
 */ 

function BOUCLE_documents_portfoliohtml_13456caf1787571873f2a053e2ba2a98(&$Cache, &$Pile, &$doublons, &$Numrows, $SP) {

	static $command = array();
	static $connect;
	$command['connect'] = $connect = '';
	$in = array();
	if (!(is_array($a = (($Pile[0]['id_rubrique'] ?? null)))))
		$in[]= $a;
	else $in = array_merge($in, $a);
	$in1 = array();
	if (!(is_array($a = (($Pile[0]['id_article'] ?? null)))))
		$in1[]= $a;
	else $in1 = array_merge($in1, $a);
	$in2 = array();
	if (!(is_array($a = (($Pile[0]['id_produit'] ?? null)))))
		$in2[]= $a;
	else $in2 = array_merge($in2, $a);
	$in3 = array();
	$in3[]= 'png';
	$in3[]= 'jpg';
	$in3[]= 'gif';
	$command['pagination'] = array((isset($Pile[0]['debut_documents_portfolio']) ? $Pile[0]['debut_documents_portfolio'] : null), 20);
	if (!isset($command['table'])) {
		$command['table'] = 'documents';
		$command['id'] = '_documents_portfolio';
		$command['from'] = array('documents' => 'spip_documents','L1' => 'spip_documents_liens','L2' => 'spip_documents_liens','L3' => 'spip_documents_liens');
		$command['type'] = array();
		$command['groupby'] = array("documents.id_document");
		$command['select'] = array("0+documents.titre AS num",
		"CASE ( 0+documents.titre ) WHEN 0 THEN 1 ELSE 0 END AS sinum",
		"documents.date",
		"documents.id_document",
		"documents.fichier",
		"documents.titre",
		"L1.id_objet AS id_article");
		$command['orderby'] = array('sinum, num', 'documents.date');
		$command['join'] = array('L1' => array('documents','id_document'), 'L2' => array('documents','id_document'), 'L3' => array('documents','id_document'));
		$command['limit'] = '';
		$command['having'] = 
			array();
	}
	$command['where'] = 
			array(
quete_condition_statut('documents.statut','publie,prop,prepa','publie',''), 
			array('(documents.taille > 0 OR documents.distant=\'oui\')'), (!is_whereable(($Pile[0]['id_rubrique'] ?? null)) ? '' : ((is_array(($Pile[0]['id_rubrique'] ?? null))) ? sql_in('L1.id_objet', $in) : 
			array('=', 'L1.id_objet', sql_quote(($Pile[0]['id_rubrique'] ?? null), '','bigint(21) NOT NULL DEFAULT 0')))), (!is_whereable(($Pile[0]['id_rubrique'] ?? null)) ? '' : 
			array('=', 'L1.objet', sql_quote('rubrique'))), (!is_whereable(($Pile[0]['id_article'] ?? null)) ? '' : ((is_array(($Pile[0]['id_article'] ?? null))) ? sql_in('L2.id_objet', $in1) : 
			array('=', 'L2.id_objet', sql_quote(($Pile[0]['id_article'] ?? null), '','bigint(21) NOT NULL DEFAULT 0')))), (!is_whereable(($Pile[0]['id_article'] ?? null)) ? '' : 
			array('=', 'L2.objet', sql_quote('article'))), (!is_whereable(($Pile[0]['id_produit'] ?? null)) ? '' : ((is_array(($Pile[0]['id_produit'] ?? null))) ? sql_in('L3.id_objet', $in2) : 
			array('=', 'L3.id_objet', sql_quote(($Pile[0]['id_produit'] ?? null), '','bigint(21) NOT NULL DEFAULT 0')))), (!is_whereable(($Pile[0]['id_produit'] ?? null)) ? '' : 
			array('=', 'L3.objet', sql_quote('produit'))), 
			array('=', 'documents.mode', "'document'"), sql_in('documents.extension', $in3), 
			array('=', 'L1.vu', "'non'"));
	if (defined("_BOUCLE_PROFILER")) $timer = time()+(float)microtime();
	$t0 = "";
	// REQUETE
	$iter = Spip\Compilateur\Iterateur\Factory::create(
		"SQL",
		$command,
		array('plugins/auto/zoundation/v1.1.0/inclure/inc-portfolio.html','html_13456caf1787571873f2a053e2ba2a98','_documents_portfolio',7,$GLOBALS['spip_lang'])
	);
	if (!$iter->err()) {
	
	// COMPTEUR
	$Numrows['_documents_portfolio']['compteur_boucle'] = 0;
	$Numrows['_documents_portfolio']['command'] = $command;
	$Numrows['_documents_portfolio']['total'] = @intval($iter->count());
	$debut_boucle = isset($Pile[0]['debut_documents_portfolio']) ? $Pile[0]['debut_documents_portfolio'] : _request('debut_documents_portfolio');
	if ($debut_boucle && $debut_boucle[0] === '@') {
		$debut_boucle = $Pile[0]['debut_documents_portfolio'] = quete_debut_pagination('id_document',$Pile[0]['@id_document'] = substr($debut_boucle,1),20,$iter);
		$iter->seek(0);
	}
	$debut_boucle = intval($debut_boucle);
	$debut_boucle = (($tout=($debut_boucle == -1))?0:($debut_boucle));
	$debut_boucle = max(0,min($debut_boucle,floor(($Numrows['_documents_portfolio']['total']-1)/(20))*(20)));
	$debut_boucle = intval($debut_boucle);
	$fin_boucle = min(($tout ? $Numrows['_documents_portfolio']['total'] : $debut_boucle + 19), $Numrows['_documents_portfolio']['total'] - 1);
	$Numrows['_documents_portfolio']['grand_total'] = $Numrows['_documents_portfolio']['total'];
	$Numrows['_documents_portfolio']["total"] = max(0,$fin_boucle - $debut_boucle + 1);
	if ($debut_boucle>0 AND $debut_boucle < $Numrows['_documents_portfolio']['grand_total'] AND $iter->seek($debut_boucle,'continue'))
		$Numrows['_documents_portfolio']['compteur_boucle'] = $debut_boucle;
	
	$SP++;
	// RESULTATS
	while ($Pile[$SP]=$iter->fetch()) {

		$Numrows['_documents_portfolio']['compteur_boucle']++;
		if ($Numrows['_documents_portfolio']['compteur_boucle'] <= $debut_boucle) continue;
		if ($Numrows['_documents_portfolio']['compteur_boucle']-1 > $fin_boucle) break;
		$t0 .= (
'
			<div class="column">
				' .
(($t1 = strval(retablir_echappements_modeles(interdire_scripts(inserer_attribut(inserer_attribut(filtrer('image_graver', filtrer('image_recadre',filtrer('image_passe_partout',get_spip_doc($Pile[$SP]['fichier']),'200','200'),'200','200','center')),'alt',(interdire_scripts(couper(attribut_html(supprimer_numero(typo($Pile[$SP]['titre'], "TYPO", $connect, $Pile[0]))),'80')))),'class','thumbnail')))))!=='' ?
		((	'<a href="' .
	retablir_echappements_modeles(vider_url(urlencode_1738(generer_objet_url($Pile[$SP]['id_document'], 'document', '', '', true)))) .
	'" type="' .
	retablir_echappements_modeles(interdire_scripts(mime_type_oembed($Pile[$SP]['id_document']))) .
	'" rel="documents_portfolio' .
	(($t2 = strval(retablir_echappements_modeles($Pile[$SP]['id_article'])))!=='' ?
			('-a' . $t2) :
			'') .
	'"' .
	(($t2 = strval(retablir_echappements_modeles(interdire_scripts(couper(attribut_html(supprimer_numero(typo($Pile[$SP]['titre'], "TYPO", $connect, $Pile[0]))),'80')))))!=='' ?
			(' title="' . $t2 . '"') :
			'') .
	'>
				') . $t1 . '
				</a>') :
		'') .
'
			</div>
		');
	}
	$iter->free();
	}
	if (defined("_BOUCLE_PROFILER")
	AND 1000*($timer = (time()+(float)microtime())-$timer) > _BOUCLE_PROFILER)
		spip_log(intval(1000*$timer)."ms BOUCLE_documents_portfolio @ plugins/auto/zoundation/v1.1.0/inclure/inc-portfolio.html","profiler"._LOG_AVERTISSEMENT);
	return $t0;
}

//
// Fonction principale du squelette plugins/auto/zoundation/v1.1.0/inclure/inc-portfolio.html
// Temps de compilation total: 1.425 ms
//

function html_13456caf1787571873f2a053e2ba2a98($Cache, $Pile, $doublons = array(), $Numrows = array(), $SP = 0) {

	if (isset($Pile[0]["doublons"]) AND is_array($Pile[0]["doublons"]))
		$doublons = nettoyer_env_doublons($Pile[0]["doublons"]);

	$connect = '';
	$page = (
(($t1 = strval(retablir_echappements_modeles('')))!=='' ?
		($t1 . ' Portfolio : album d\'images ') :
		'') .
'
' .
(($t1 = BOUCLE_documents_portfoliohtml_13456caf1787571873f2a053e2ba2a98($Cache, $Pile, $doublons, $Numrows, $SP))!=='' ?
		((	'

	' .
		(($t3 = strval(retablir_echappements_modeles('')))!=='' ?
				($t3 . ' Selection du bloc-grid en fonction de la version de Foundation ') :
				'') .
		'
	' .
		retablir_echappements_modeles(filtre_pagination_dist($Numrows["_documents_portfolio"]["grand_total"],
 		'_documents_portfolio',
		isset($Pile[0]['debut_documents_portfolio'])?$Pile[0]['debut_documents_portfolio']:intval(_request('debut_documents_portfolio')),
		20, false, '', '', array())) .
		'
	<div id="documents_portfolio" class="row small-up-2 medium-up-3 large-up-4">
		') . $t1 . (	'
	</div>
	' .
		(($t3 = strval(retablir_echappements_modeles(filtre_pagination_dist($Numrows["_documents_portfolio"]["grand_total"],
 		'_documents_portfolio',
		isset($Pile[0]['debut_documents_portfolio'])?$Pile[0]['debut_documents_portfolio']:intval(_request('debut_documents_portfolio')),
		20, true, 'foundation', '', array()))))!=='' ?
				('<nav class="pagination">' . $t3 . '</nav>') :
				'') .
		'
')) :
		'') .
'
');

	return analyse_resultat_skel('html_13456caf1787571873f2a053e2ba2a98', $Cache, $page, 'plugins/auto/zoundation/v1.1.0/inclure/inc-portfolio.html');
}

grrr pas logique, sur quelle url on peut le voir ?

Pas d’url particulière… disons que cette erreur est produite au fil de la consultation du site ruedesarts.net

Ce code est utilisé est dans les articles, quel article du site utilise le portfolio ?

y’en a plein… par exemple :

En surveillant mes logs, ces erreurs 0 de mysql continuent de figurer. Je constate la présence régulière et répétitive de

  • 1 Pri:ERREUR: fonction execute_pipeline_evenement_liaisons_colonne_gauche absente : pipeline desactive

Ainsi qu’une série de messages qui reviennent régulièrement concernant des « collisions » (qu’est-ce que c’est une « collision » ?) qui mentionnent des plugins que je n’utilise pas dans ce site.

Quelle conduite à tenir, quelles actions à effectuer suite à ces différents messages ?
`