MySQL

Version de MySQL : à partir de la 5.5-20.

 

accueil | console | VBScript | PowerShell | php | MySQL | documentation | formation  | trucs et astuces | exemples | glossaire

 

 

 

 

 

Généralités

La gestion d'erreurs dans l'environnement MySQL

Programmation de la gestion des erreurs dans un script MySQL

Error Handler en environnement MySQL

Journalisation des erreurs en environnement MySQL

 

 

I - GENERALITES

 

Comme chacun sait, MySQL est un système de gestion de bases de données relationnel Open Source, probablement le plus utilisé pour la conception de sites WEB. Créé en 1995 par la société suédoise MySQL AB, celle-ci a été acquise par Sun Microsystems en 2008, puis Sun a été acquis par Oracle en 2009. Les trois concurrents, de MySQL dans le monde des sgdb relationnels, étant Rdb/VMS (DEC, acquis par Oracle), Oracle Database et Microsoft SQL Server, on comprend qu'aujourd'hui il ne reste plus que deux éditeurs de sgdb. Vue la nullité avérée des produits Microsoft, vous aurez compris qu'il n'y en a en réalité plus qu'un de sérieux. Et ca tombe bien, puisque c'est de celui-ci que nous allons parler maintenant.

 

Sachez aussi que le langage le plus adapté au dialogue avec MySQL est... php. Donc, si vous avez lu la page précédente, vous allez bientôt tout connaître !

 

 

[début]


 

II - LA GESTION D'ERREURS DANS L'ENVIRONNEMENT MySQL

 

Tout appel, depuis quelque langage que ce soit, à une instruction MySQL renvoie trois informations sur la bonne exécution (ou non) de l'instruction. Le langage php, notamment, en renvoie une quatrième : TRUE ou FALSE.

 

Exemple à partir de l'interpréteur MySQL

 

shell> SELECT * FROM no_such_table;
ERROR 1146 (42S02): Table 'no_such_table' doesn't exist

 

La première information est le numéro de l'erreur, écrit par le système dans la variable mysql_errno()

La seconde (entre parenthèses) est un code d'état du microsystème MySQL suite à l'appel à l'instruction. C'est mysql_sqlstate()

La troisième est le texte explicatif de l'erreur. il est contenu dans mysql_error(). Il change en fonction de la langue paramétrée à l'installation de MySQL

La quatrième, retournée par php, est un indicateur sur la bonne exécution de l'instruction. Il est retourné dans la variable à gauche du signe "=".

 

ATTENTION : mysql_sqlstate n'est utilisable qu'avec la version "programmation orientée objets" de php (PDO) et de MySQL (mysqli).

 

Exemple dans un script php en programmation dite procédurale (à l'opposé de "orientée objets")

 

$db_server = "mysql.monsite.com";
$db_basename = "mabase";
$db_user = "root";
$db_pwd = "123456789";

$rs = mysql_connect($db_server, $db_user, $db_pwd);
if (!$rs)
{
   echo "%NIP-F-SQLCONNECT, Connect error " . mysql_errno() . " " . mysql_error();
   exit;
}
$rs = mysql_select_db($db_basename);
if (!$rs)
{
   echo "%NIP-F-SQLOPEN, Open error " . mysql_errno() . " " . mysql_error();
   exit;
}
$query = "SELECT * FROM utilisateurs WHERE idTransaction= '$txn_id'";
$rs = mysql_query($query);
if (!$rs)
{
   $err = "%NIP-F-SQLQUERY_1, Query error " . mysql_errno() . " " . mysql_error();
   exit;
}
$data = mysql_fetch_object($query);

if (!$data)

{

 

La différence entre les codes d'erreur renvoyés dans mysql_errno() et mysql_sqlstate() est la suivante :

 

mysql_errno()    est un code erreur spécifique à MySQL

mysql_sqlstate() est un code erreur conforme au standard ANSI SQL et ODBC (Open DataBase Connectivity)

 

La liste des codes erreur MySQL côté client se trouve dans le fichier errmsg.h

La liste des codes erreur MySQL côté serveur se trouve ici.

La liste des codes erreur SQLstate se trouve .

 

Comme d'habitude, pour en savoir plus, la doc.

 

 

[début]


 

III - PROGRAMMATION DE LA GESTION DES ERREURS DANS UN SCRIPT php/MySQL

 

Bon, bin, là, y'a pas grand chose à dire vu que, qui dit script php/MySQL, dit page précédente... :-)

 

 

[début]


 

IV - ERROR HANDLER EN ENVIRONNEMENT MySQL

 

Il existe sur Internet une série de trois magnifiques articles écrits par Guy Harrison et Steven Feuerstein, tirés de leur bouquin édité chez O'Reilly : MySQL Stored Procedure Programming (2006) :

 

 

L'auteur ne voit pas la nécessité ici de paraphraser ces articles.

 

 

[début]


 

V - JOURNALISATION DES ERREURS EN ENVIRONNEMENT MySQL

 

Vue la complexité de fonctionnement des systèmes de gestion de bases de données, il est évident que MySQL dispose d'un système de log depuis longtemps, disons même depuis que le produit existe. Il n'y a donc (presque) rien à programmer.

 

Dans MySQL, il existe en standard cinq fichiers de log :

  • Error Log

  • General Query Log

  • Binary Log

  • Relay Log

  • Slow Query Log

Par défaut, aucun fichier de log n'est activé. C'est important à savoir. Pour activer le logging, lire ceci. Ces données peuvent être écrites dans des fichiers-texte ("file logging") ou dans des tables de la base ("table logging").

 

Le fichier Error Log enregistre les problèmes rencontrés au démarrage, pendant l'exécution de MySQL et à l'arrêt.

 

Le fichier General Query Log enregistre les connexions et les transactions des clients

 

Le fichier Binary Log enregistre les transactions reçues qui changent des données dans la base

 

Le fichier Relay Log mémorise les données transmises par un serveur de réplication le cas échéant

 

Le fichier Slow Query Log enregistre les transactions "longues" (le paramètre de durée est au choix de l'administrateur de la base)

 

La documentation de tout ça (en anglais) est ici. Bonne lecture !

 

 

[début]


 

accueil | console | VBScript | PowerShell | php | MySQL | documentation | formation  | trucs et astuces | exemples | glossaire