Connaître ses erreurs PHP et SQL

WRInaute accro
Bonjour,

Il y a t-il un moyen de faire un journal de log de ses erreurs PHP/SQL afin de pouvoir les corriger ensuite ?

Merci d'avance,

Michaël
 
WRInaute accro
Le php.ini est à écrire soi-même en fonction du site ou il existe un fichier "générique" ?
 
WRInaute passionné
Je te livre un bout de code brut de décoffrage si cela peut t'aider :

Code:
Où $sql_connect_serveur = mysqli_connect($bd['serveur'], $bd['login'], $bd['pass']); // Identifiant de connection au serveur SQL

/* **********************************************
gestionErreurSql()
- Gestion des erreurs retourné par le serveur SQL
- Dernière version : 27/05/07
********************************************** */
function gestionErreurSql() {
	
	global $sql_connect_serveur;
	
	$exp_sql_erreur = explode('\'', mysqli_error($sql_connect_serveur) );	// Découpe du message d'erreur retourné par mysqli_error()
	
	// Sélection du numéro d'erreur SQL pour déterminer le message d'erreur	
	switch(mysqli_errno($sql_connect_serveur) ) {
		case 1040: // Too many connections
			return 'Trop de connections simultanées.';
			break;
		case 1044: // Access denied for user: 'login' to database 'nombase'
			return 'La base de données « '.$exp_sql_erreur[3].' » n\'a pas été trouvée.';
			break;
		case 1045: // Access denied for user: 'login' (Using password: YES)
			return 'L\'utilisateur désigné « '.$exp_sql_erreur[1].' » n\'a pas été trouvé.';
			break;			
		case 1046: // No Database Selected
			return 'Aucune base de données n\'à été sélectionnée.';
			break;			
		case 1052: // Column: 'champ' in where clause is ambiguous
			return 'La clause WHERE est ambiguë pour la colonne '.$exp_sql_erreur[1].'.';
			break;			
		case 1053: // Server shutdown in progress
			return 'Le serveur SQL à été arrêté.';
			break;
		case 1054:
			// Sélection du message d'erreur
			switch($exp_sql_erreur[3]) {
				case 'field list': // Unknown column 'nomChamp' in 'field list'
					return 'Le champ « '.$exp_sql_erreur[1].' » précisé dans la liste des champs n\'a pas été trouvé.';
					break;
				case 'where clause': // Unknown column 'nomChamp' in 'where clause'
					return 'Le champ « '.$exp_sql_erreur[1].' » précisé dans la clause WHERE n\'a pas été trouvé.';
					break;
				default:
					return mysqli_error($sql_connect_serveur);
			}
			break;			
		case 1062: // Duplicate entry
			return 'Entrée dupliquée pour « '.$exp_sql_erreur[1].' ».';
			break;
		case 1064: // You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'requete'
			return 'Une erreur de syntaxe SQL se trouve dans la requête « '.$exp_sql_erreur[1].' ».';			
			break;
		case 1065: // Query was empty
			return 'Aucune requête SQL n\'à été trouvée.';			
			break;
		case 1109: // Unknown table 'nom_table' in where clause
		case 1146: // Idem
			return 'La table « '.$exp_sql_erreur[1].' » n\'a pas été trouvée dans la clause WHERE.';			
			break;			
		case 2002: // Can't connect to local MySQL server through socket 'chemnin d'accès'
			return 'Échec lors de la connection au serveur SQL.';
			break;			
		case 2003: // Can't connect to MySQL server on 'serveur'
			return 'La connection n\'a pas pu s\'établir sur le serveur « '.$exp_sql_erreur[1].' ».';
			break;
		case 2005: // Unknown MySQL Server Host 'serveur' (2)
			return 'Le serveur SQL « '.$exp_sql_erreur[1].' » n\'a pas été trouvé.';
			break;
		case 2013: // Lost connection to MySQL server during query
			return 'La connection au serveur SQL à été perdue lors de la requête.';
			break;
		default:
			return mysqli_error($sql_connect_serveur);
	}
}

Je me sert de cette portion de code pour détecter la cause et l'origine d'une erreur SQL
Je m'envois un e-mail pour être au courant.
 
WRInaute passionné
Après une requête SQL :

Code:
$sql_result = mysqli_query($sql_connect_serveur, $sql); // Envoi la requête au serveur SQL

Tu vérifie la valeur de $sql_result :
Code:
if($sql_result === FALSE ) {		
		// Message pour le visiteur
		$mess_visiteur  = '<p align="center"><strong><font color="#FF0000">Une erreur est survenue dans la base de données.<br />';
		$mess_visiteur .= 'L\'administrateur a été prévenu et résoudra le problème au plus vite.</font></strong><br />';
		$mess_visiteur .= '<a href="http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'].'">Cliquez sur ce lien pour recharger la page.</a></p>';
		
		// Message pour l'admin
		$mess_admin = 'Erreur SQL : '.mysqli_errno($sql_connect_serveur)."\n\r";
		$mess_admin .= 'Serveur SQL : '.$bd['serveur']."\n\r";
		$mess_admin .= 'Base de données : '.$bd['base']."\n\r";
		$mess_admin .= 'Description de la requête : '.$sql_desc."\n\r";			
		$mess_admin .= 'Requête effectuée : '.$sql."\n\r";
		$mess_admin .= 'Message d\'erreur : '.gestionErreurSql()."\n\r";
		
		// Sujet de l'e-mail
		$mail_sujet = 'Échec lors de l\'exécution d\'une requête SQL'; // Sujet de l'email
		
// Là tu peux envoyer un e-mail ou remplir un fichier, ou une BDD ; au choix	
		
		exit($mess_visiteur);
	}

Si tu n'arrives pas à comprendre mon code, j'adapte cela pour une utilisation générique
 
WRInaute passionné
le niveau de gravité de l'erreur à logger est défini dans php.ini mais le fichier log est défini dans le fichier de config apache

tu pourrais essayer d'ecraser ces directive par un htaccess

Code:
# pour php
php_admin_value error_reporting E_ALL

# pour apache tu mets le chemin vers ton fichier log
ErrorLog /var/log/apache2/192.168.0.2/error.log

rog
 
WRInaute accro
Je fais un gros up pour demander : comment on fait quand on n'a pas accès à la fonction "mysqli_query" ?

OTP
 
WRInaute accro
Et ça me donne aussi accès aux erreurs ?
J'avais laissé tomber à l'époque et là encore je galère...
 
WRInaute passionné
Mon code n'a pas du trop changé je pense...

Tu remplace mysqli par mysql dans tout le code.

Normalement, ça doit être bon.
 
WRInaute accro
Quoi qu'il y ait au dessus, requête OK ou pas, j'ai ça en retour : "Resource id #3"
 
WRInaute passionné
OTP a dit:
Quoi qu'il y ait au dessus, requête OK ou pas, j'ai ça en retour : "Resource id #3"

Il faudrait que je revois mon code peut-être.

En attendant, il me sert régulièrement. Un exemple de ce que je peux recevoir par mail avec ça :

Code:
    * Erreur SQL : 1139
    * Serveur SQL : nom du serveur
    * Base de données : nom de la base
    * Description de la requête : trouver le domaine « http://www.bing.com/search?q=sciences+et+vie+++&form=QBRE&filt=all » dans les partenaires.
    * Requête effectuée : SELECT partenaire_id FROM gen_partenaire WHERE partenaire_url REGEXP 'http://www.bing.com/search?q=sciences+et+vie+++&form=QBRE&filt=all'
    * Message d'erreur : Erreur « repetition-operator operand invalid » provenant de regexp.
    * Valeur : 'http://www.bing.com/search?q=sciences+et+vie+++&form=QBRE&filt=all'

    * Code erreur internet :
    * Date et heure d'accès : 12/04/10 à 11:24:25
    * Url demandée : /
    * Provenance : http://www.bing.com/search?q=sciences+et+vie+++&form=QBRE&filt=all
    * Navigateur utilisé : Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.1; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.1.4322)
    * Méthode utilisée : GET
    * Chaine de requête :
    * Nom de Domaine : 46.176-66-87.adsl-dyn.isp.belgacom.be
    * IP du visiteur : C'est privé ^^
 
WRInaute passionné
Je te remet le code que j'ai actuellement :

Sachant que la globale $sql_connect_serveur est ton id de connexion

Code:
function gestionErreurSql() {
	
	global $sql_connect_serveur;
	
	$exp_sql_erreur = explode('\'', mysqli_error($sql_connect_serveur)); // Découpe du message d'erreur retourné par mysqli_error()
	
	// Sélection du numéro d'erreur SQL pour déterminer le message d'erreur
	switch(mysqli_errno($sql_connect_serveur)) {
		case 1040: // Too many connections
			return 'Trop de connections simultanées.';
			break;
		case 1044: // Access denied for user: 'login' to database 'nombase'
			return 'La base de données « ' . $exp_sql_erreur[3] . ' » n\'a pas été trouvée.';
			break;
		case 1045: // Access denied for user: 'login' (Using password: YES)
			return 'L\'utilisateur désigné « ' . $exp_sql_erreur[1] . ' » n\'a pas été trouvé.';
			break;
		case 1046: // No Database Selected
			return 'Aucune base de données n\'a été sélectionnée.';
			break;
		case 1052: // Column: 'champ' in where clause is ambiguous
			return 'La clause WHERE est ambiguë pour la colonne ' . $exp_sql_erreur[1] . '.';
			break;
		case 1053: // Server shutdown in progress
			return 'Le serveur SQL a été arrêté.';
			break;
		case 1054:
			// Sélection du message d'erreur
			switch($exp_sql_erreur[3]) {
				case 'field list': // Unknown column 'nomChamp' in 'field list'
					return 'Le champ « ' . $exp_sql_erreur[1] . ' » précisé dans la liste des champs n\'a pas été trouvé.';
					break;
				case 'where clause': // Unknown column 'nomChamp' in 'where clause'
					return 'Le champ « ' . $exp_sql_erreur[1] . ' » précisé dans la clause WHERE n\'a pas été trouvé.';
					break;
				default:
					return mysqli_error($sql_connect_serveur);
			}
			break;
		case 1062: // Duplicate entry
			return 'Entrée dupliquée pour « ' . $exp_sql_erreur[1] . ' ».';
			break;
		case 1064: // You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'requete'
			return 'Une erreur de syntaxe SQL se trouve dans la requête « ' . $exp_sql_erreur[1] . ' ».';
			break;
		case 1065: // Query was empty
			return 'Aucune requête SQL n\'a été trouvée.';
			break;
		case 1109: // Unknown table 'nom_table' in where clause
		case 1146: // Idem
			return 'La table « ' . $exp_sql_erreur[1] . ' » n\'a pas été trouvée dans la clause WHERE.';
			break;
		case 1139: // Got error 'repetition-operator operand invalid' from regexp
			return 'Erreur « ' . $exp_sql_erreur[1] . ' » provenant de regexp.';
			break;
		case 2002: // Can't connect to local MySQL server through socket 'chemnin d'accès'
			return 'Échec lors de la connection au serveur SQL.';
			break;
		case 2003: // Can't connect to MySQL server on 'serveur'
			return 'La connection n\'a pas pu s\'établir sur le serveur « ' . $exp_sql_erreur[1] . ' ».';
			break;
		case 2005: // Unknown MySQL Server Host 'serveur' (2)
			return 'Le serveur SQL « ' . $exp_sql_erreur[1] . ' » n\'a pas été trouvé.';
			break;
		case 2013: // Lost connection to MySQL server during query
			return 'La connection au serveur SQL a été perdue lors de la requête.';
			break;
		default:
			return 'Message à traduire : ' . mysqli_error($sql_connect_serveur);
	}
}

Cette fonction doit être appelé après une requête si elle échoue :

Code:
$sql_result = mysqli_query($sql_connect_serveur, $sql); // Envoi la requête au serveur SQL
	
	// Détermination de la requête
	if ($sql_result === FALSE ) {
récupération de ton erreur en appelant la fonction fonction gestionErreurSql()
Dans mon cas, ça passe par mail
}
 
WRInaute accro
Leonick a dit:
et regarde si tu as mysqli qui s'affiche. Normalement oui chez ovh

A part ça en entête, que dalle.
Configure Command './configure' '--enable-discard-path' '--with-config-file-path=/usr/local/lib' '--enable-sigchild' '--with-pcre-regex' '--enable-magic-quotes' '--enable-short-tags' '--with-exec-dir=/home/' '--with-openssl=/usr' '--disable-rpath' '--enable-libgcc' '--disable-pic' '--with-zlib=/usr' '--enable-bcmath' '--enable-calendar' '--with-curl=/usr' '--with-gdbm=/usr' '--with-db3=/usr' '--enable-dbase' '--enable-xslt=/usr' '--with-xslt-sablot=/usr' '--with-dom=/usr' '--with-dom-xslt=/usr' '--with-kerberos' '--with-dom-exslt=/usr' '--enable-exif' '--enable-mbstring' '--enable-mbregex' '--enable-filepro' '--enable-ftp' '--with-ming=/usr/local' '--with-gd' '--with-expat-dir=/usr' '--enable-gd-native-tt=/usr' '--with-jpeg-dir=/usr' '--with-png-dir=/usr' '--with-ttf=/usr' '--with-freetype-dir=/usr' '--with-t1lib=/usr' '--with-gettext=/usr' '--with-imap=/var/log/ovh/imap-2004g/' '--with-imap-ssl=/var/log/ovh/imap-2004g/' '--with-mcrypt=/usr' '--with-mhash=/usr' '--with-mysql=/usr' '--with-mysqli=/usr/bin/mysql_config' '--with-pdflib=/usr/local/' '--with-jpeg-dir=/usr' '--with-png-dir' '--with-tiff-dir' '--enable-trans-sid' '--with-regex=system' '--enable-sysvsem' '--enable-sysvshm' '--with-xpm-dir=/usr' '--with-zziplib=/usr' '--enable-wddx' '--with-zip=/usr/lib' '--with-sablot=/usr' '--enable-inline-optimization' '--with-gnu-ld' '--enable-soap' '--with-pspell' '--with-pgsql=/usr' '--with-gmp'
 
WRInaute passionné
Si tu reprend mon code, ça donnerait cela :

Code:
$sql_connect_serveur = mysql_connect(host,user,pass);

Si cela peut t'aider, je me sert d'une fonction pour ma connection (à adapter à ton cas)

Code:
function connectBd($bd_infos) {
	
	global $bd_param, $sql_connect_serveur;
	
	$bd_param = $bd_infos; // Paramètres de connection de la base de données
	
	$sql_connect_serveur = mysqli_init(); // Initialise MySQLi et retourne une ressource à utiliser avec mysqli_real_connect()
	
	$option = mysqli_options($sql_connect_serveur, MYSQLI_INIT_COMMAND, 'SET NAMES utf8'); // Passage à l'UTF8
	$option_bis = mysqli_options($sql_connect_serveur, MYSQLI_OPT_CONNECT_TIMEOUT, 10); // Délai maximal de connection en seconde
	
	$sql_connect = mysqli_real_connect($sql_connect_serveur, $bd_param['serveur'], $bd_param['login'], $bd_param['pass'], $bd_param['base']); // Connection au serveur SQL et sélection de la base
	
	// Vérification de la validité des identifiants de connection
	if ($sql_connect_serveur === FALSE || $option === FALSE || $option_bis === FALSE || $sql_connect === FALSE) {
		// Inclusion des fonctions nécessaires
		require_once(FICH_INC_FUNC_EMAIL_ADMIN);
		
		// Message pour le visiteur
		$alerte_visiteur  = '<p align="center"><strong><font color="#FF0000">Une erreur est survenue dans la base de données.<br /><br />';
		$alerte_visiteur .= 'L\'administrateur a été prévenu et travaille sur le rétablissement du site.</font></strong><br /><br />';
		$alerte_visiteur .= '<a href="http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] . '">Cliquez sur ce lien pour tenter de résoudre le problème automatiquement.</a></p>';
		
		// Message pour l'admin
		$texte_plain = 'Type d\'alerte : ';
		$texte_html = '<ul><li>Type d\'alerte : </li><ul>';
		
		if ($sql_connect_serveur === FALSE) {
			$texte_plain = 'Échec lors de l\'initialisation de MySQLi.' . "\n";
			$texte_html = '<li>Échec lors de l\'initialisation de MySQLi.</li>';
		}
		
		if ($option === FALSE) {
			$texte_plain .= 'Échec lors du passage à l\'UTF 8.' . "\n";
			$texte_html .= '<li>Échec lors du passage à l\'UTF 8.</li>';
		}
		
		if ($option_bis === FALSE) {
			$texte_plain .= 'Échec lors l\'initialisation du délai maximal de connection.' . "\n";
			$texte_html .= '<li>Échec lors l\'initialisation du délai maximal de connection.</li>';
		}
		
		if ($sql_connect === FALSE) {
			$texte_plain .= 'Échec lors de la connection.' . "\n";
			$texte_html .= '<li>Échec lors la connection.</li>';
		}
		
		$texte_plain .= "\r";
		$texte_plain .= 'Serveur SQL : ' . $bd_param['serveur'] . "\n";
		$texte_plain .= 'Base de données : ' . $bd_param['base'] . "\n";
		$texte_plain .= 'Erreur SQL : ' . mysqli_errno($sql_connect_serveur) . "\n\r";
		
		$texte_html .= '</ul>';
		$texte_html .= '<li>Serveur SQL : <b>' . $bd_param['serveur'] . '</b></li>';
		$texte_html .= '<li>Base de données : <b>' . $bd_param['base'] . '</b></li>';
		$texte_html .= '<li>Erreur SQL : <b>' . mysqli_errno($sql_connect_serveur) . '</b></li></ul>';
		
		$sujet = 'Échec lors de la connection au serveur SQL'; // Sujet de l'email
			
		// Envoi un e-mail à l'administrateur
		emailAdmin($texte_plain, $texte_html, $sujet);
		
		exit($alerte_visiteur);
	}
			
	return $sql_connect_bd;
}
 
WRInaute accro
Code:
Fatal error: Call to undefined function: mysqli_init() in /homez.64/thewindp/www/essai.php on line 15
:(
 
WRInaute passionné
Dans ce cas, reprend le code en oubliant mysqli. Je ne vois pas comment t'aider autrement.

mysql ou mysqli, tu peux toujours récupérer tes erreurs.

Dans ton cas, ma fonction de connection devient :

Code:
function connectBd($bd_infos) {
   
   global $bd_param, $sql_connect_serveur;
   
   $bd_param = $bd_infos; // Paramètres de connection de la base de données
   
   $sql_connect_serveur = mysql_connect($bd_param['serveur'], $bd_param['login'], $bd_param['pass'], $bd_param['base']); // Connection au serveur SQL et sélection de la base
   
   // Vérification de la validité des identifiants de connection
   if ($sql_connect_serveur === FALSE) {
      // Message pour le visiteur
      $alerte_visiteur  = '<p align="center"><strong><font color="#FF0000">Une erreur est survenue dans la base de données.<br /><br />';
      $alerte_visiteur .= 'L\'administrateur a été prévenu et travaille sur le rétablissement du site.</font></strong><br /><br />';
      $alerte_visiteur .= '<a href="http://' . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'] . '">Cliquez sur ce lien pour tenter de résoudre le problème automatiquement.</a></p>';
      
      // Message pour l'admin
      $texte_plain = 'Type d\'alerte : ';
      $texte_html = '<ul><li>Type d\'alerte : </li><ul>';
      
     if ($sql_connect === FALSE) {
         $texte_plain .= 'Échec lors de la connection.' . "\n";
         $texte_html .= '<li>Échec lors la connection.</li>';
      }
      
      $texte_plain .= "\r";
      $texte_plain .= 'Serveur SQL : ' . $bd_param['serveur'] . "\n";
      $texte_plain .= 'Base de données : ' . $bd_param['base'] . "\n";
      $texte_plain .= 'Erreur SQL : ' . mysql_errno($sql_connect_serveur) . "\n\r";
      
      $texte_html .= '</ul>';
      $texte_html .= '<li>Serveur SQL : <b>' . $bd_param['serveur'] . '</b></li>';
      $texte_html .= '<li>Base de données : <b>' . $bd_param['base'] . '</b></li>';
      $texte_html .= '<li>Erreur SQL : <b>' . mysql_errno($sql_connect_serveur) . '</b></li></ul>';
      
      $sujet = 'Échec lors de la connection au serveur SQL'; // Sujet de l'email
         
      // Ici ton code pour t'envoyer un mail éventuellement

      exit($alerte_visiteur);
   }
         
   return $sql_connect_bd;
}

La fonction de récupération de ton erreur :

Code:
    function gestionErreurSql() {
       
       global $sql_connect_serveur;
       
       $exp_sql_erreur = explode('\'', mysql_error($sql_connect_serveur)); // Découpe du message d'erreur retourné par mysql_error()
       
       // Sélection du numéro d'erreur SQL pour déterminer le message d'erreur
       switch(mysql_errno($sql_connect_serveur)) {
          case 1040: // Too many connections
             return 'Trop de connections simultanées.';
             break;
          case 1044: // Access denied for user: 'login' to database 'nombase'
             return 'La base de données « ' . $exp_sql_erreur[3] . ' » n\'a pas été trouvée.';
             break;
          case 1045: // Access denied for user: 'login' (Using password: YES)
             return 'L\'utilisateur désigné « ' . $exp_sql_erreur[1] . ' » n\'a pas été trouvé.';
             break;
          case 1046: // No Database Selected
             return 'Aucune base de données n\'a été sélectionnée.';
             break;
          case 1052: // Column: 'champ' in where clause is ambiguous
             return 'La clause WHERE est ambiguë pour la colonne ' . $exp_sql_erreur[1] . '.';
             break;
          case 1053: // Server shutdown in progress
             return 'Le serveur SQL a été arrêté.';
             break;
          case 1054:
             // Sélection du message d'erreur
             switch($exp_sql_erreur[3]) {
                case 'field list': // Unknown column 'nomChamp' in 'field list'
                   return 'Le champ « ' . $exp_sql_erreur[1] . ' » précisé dans la liste des champs n\'a pas été trouvé.';
                   break;
                case 'where clause': // Unknown column 'nomChamp' in 'where clause'
                   return 'Le champ « ' . $exp_sql_erreur[1] . ' » précisé dans la clause WHERE n\'a pas été trouvé.';
                   break;
                default:
                   return mysql_error($sql_connect_serveur);
             }
             break;
          case 1062: // Duplicate entry
             return 'Entrée dupliquée pour « ' . $exp_sql_erreur[1] . ' ».';
             break;
          case 1064: // You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'requete'
             return 'Une erreur de syntaxe SQL se trouve dans la requête « ' . $exp_sql_erreur[1] . ' ».';
             break;
          case 1065: // Query was empty
             return 'Aucune requête SQL n\'a été trouvée.';
             break;
          case 1109: // Unknown table 'nom_table' in where clause
          case 1146: // Idem
             return 'La table « ' . $exp_sql_erreur[1] . ' » n\'a pas été trouvée dans la clause WHERE.';
             break;
          case 1139: // Got error 'repetition-operator operand invalid' from regexp
             return 'Erreur « ' . $exp_sql_erreur[1] . ' » provenant de regexp.';
             break;
          case 2002: // Can't connect to local MySQL server through socket 'chemnin d'accès'
             return 'Échec lors de la connection au serveur SQL.';
             break;
          case 2003: // Can't connect to MySQL server on 'serveur'
             return 'La connection n\'a pas pu s\'établir sur le serveur « ' . $exp_sql_erreur[1] . ' ».';
             break;
          case 2005: // Unknown MySQL Server Host 'serveur' (2)
             return 'Le serveur SQL « ' . $exp_sql_erreur[1] . ' » n\'a pas été trouvé.';
             break;
          case 2013: // Lost connection to MySQL server during query
             return 'La connection au serveur SQL a été perdue lors de la requête.';
             break;
          default:
             return 'Message à traduire : ' . mysql_error($sql_connect_serveur);
       }
    }

Dans l'exemple que je te donne :

:arrow: Tu fais ta connection avec la fonction connectBd
:arrow: Tu lances ta requêtes comme tu veux, et si elle échoue, tu appelle la fonction gestionErreurSql

Je te l'ai adpaté pour mysql et non pour mysqli.

Si quelqu'un peut me relire et confirmer que je n'ai pas fait d'erreur...
 
WRInaute passionné
Content de t'avoir aidé.

Avec ce code, si un code d'erreur ou un message n'est pas pris en compte, tu aura le numéro d'erreur et le message anglais.

À toi de modifier le gestionnaire d'erreur en ajoutant les données nécessaire.
 
Discussions similaires
Haut