Détecter et enregistrer les erreurs des requêtes mySQL

Publié le 27 janvier 2011 - Developpement Web. Tags : , ,

Parce que l’optimisation est une nécessité, un code propre gage qualité, il faut tracker la moindre erreur possible sur son site internet. Aujourd’hui, petit snippet PHP pour vous aider à enregistrer les erreurs SQL générées sur votre site. Rien de bien compliqué au niveau de la mise en place, commencez par créer la table qui va logger les erreurs :

CREATE TABLE IF NOT EXISTS `sql_errors` (
  `sql_id` int(5) NOT NULL auto_increment,
  `sql_erno` int(6) NOT NULL,
  `sql_msg` text character set latin1 collate latin1_general_ci NOT NULL,
  `sql_time` datetime NOT NULL,
  `sql_query` text character set utf8 collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`sql_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci ;

Changez ensuite toutes les mysql_query() de votre site par la fonction suivante (idéalement collez-là dans un fichier functions.inc.php inclu sur toutes vos pages) :

function db_query($sql) {
	$QueryDB = mysql_query($sql);
	if (mysql_errno()) {
		$erno = mysql_errno();
		$ermsg = mysql_error();
		mysql_query("INSERT INTO sql_errors VALUES ('','".mysql_real_escape_string($erno)."','".mysql_real_escape_string($ermsg)."', now(),'".mysql_real_escape_string($sql)."')");
	}
	return $QueryDB;
}

En clair, si une erreur est détectée lors d’une requête au serveur mySQL, on renvoie le numéro ainsi que le message d’erreur généré, accompagné de la requête ayant posé le problème. Bien entendu vous pouvez réutiliser ce code pour vérifier les mysql_connect() et mysql_select_db().

Ce snippet peut aussi faire office de complément à celui pour calculer le nombre de requêtes SQL en PHP. Pour mixer les 2, ajoutez ces 2 lignes avant $QueryDB =

global $query_count;
$query_count++;

Voilà, c’est tout !


Articles sur ce thème :