La gestion des erreurs ( mysql, mysqli, PDO )

ViPHP
ViPHP | 5462 Messages

26 sept. 2010, 04:05

Parce que le or die ca pique les yeux et ne rien mettre c'est encore pire :wink:

Extension : mysql

Gestion des erreurs avec mysql.trace_mode

Options : On, Off
Défaut : Off
Recommandé : On

http://www.php.net/manual/fr/mysql.conf ... trace-mode
ini_set('mysql.trace_mode', 1);
mysql_connect('localhost', 'root');
$query = mysql_query('error');
Warning: mysql_query(): 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 'error' at line 1 in /Library/WebServer/Documents/test/index.php on line 3
Extension : mysqli

Gestion des erreurs avec mysqli_report ou la class mysqli_driver et sa propriété report_mode

Options : MYSQLI_REPORT_OFF, MYSQLI_REPORT_ALL, MYSQLI_REPORT_STRICT, MYSQLI_REPORT_ERROR , MYSQLI_REPORT_INDEX
Défaut : MYSQLI_REPORT_OFF
Recommandé : MYSQLI_REPORT_ALL & ~MYSQLI_REPORT_STRICT
Recommandé POO : MYSQLI_REPORT_ALL

http://fr.php.net/manual/fr/function.mysqli-report.php
http://fr.php.net/manual/fr/class.mysql ... eport-mode
//Procedural
mysqli_report(MYSQLI_REPORT_ALL & ~MYSQLI_REPORT_STRICT);

$dbh = mysqli_connect('localhost', 'root');
$query = mysqli_query($dbh, 'error');

//POO
$driver = new mysqli_driver();
$driver->report_mode = MYSQLI_REPORT_ALL & ~MYSQLI_REPORT_STRICT;

$dbh = new mysqli('localhost', 'root');
$query = $dbh->query('error');
Warning: mysqli::query(): (42000/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 'error' at line 1 in /Library/WebServer/Documents/test/index.php on line 6
Extension : PDO

Gestion des erreurs avec l'attribut PDO::ATTR_ERRMODE

Options : PDO::ERRMODE_SILENT, PDO::ERRMODE_WARNING, PDO::ERRMODE_EXCEPTION
Défaut : PDO::ERRMODE_SILENT
Recommandé : PDO::ERRMODE_WARNING
Recommandé POO : PDO::ERRMODE_EXCEPTION

http://php.net/manual/fr/pdo.error-handling.php
try 
{
    $dbh = new PDO('mysql:host=localhost', 'root');
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
}
catch(PDOException $e)
{
    exit($e->getMessage());
}

$query = $dbh->query('error');
Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 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 'error' at line 1 in /Library/WebServer/Documents/test/index.php on line 11

EDIT pour les modos : ca aurait peu-être plus sa place dans Vos contributions ou FAQ et tutoriels :?:
Modifié en dernier par stealth35 le 01 mars 2011, 21:17, modifié 5 fois.

Petit nouveau ! | 7 Messages

27 sept. 2010, 03:54

Salut,

pour mon info, pourquoi ca pik tes yeux le or die ?

On obtient les bonnes infos dedans.

ViPHP
ViPHP | 5462 Messages

27 sept. 2010, 05:09

Salut,

pour mon info, pourquoi ca pik tes yeux le or die ?

On obtient les bonnes infos dedans.
parce que c'est de la bidouille et ce t'oblige a le mettre a chaque fois

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

27 sept. 2010, 09:47

Salut,

pour mon info, pourquoi ca pik tes yeux le or die ?

On obtient les bonnes infos dedans.
Parce que :
  • Ce n'est pas une bonne pratique de finir l'exécution du programme à la 1ere erreur rencontrée
  • parce que c'est compliqué de gérer proprement les différentes erreurs
  • parce que c'est difficile de faire une bonne remontée d'erreur
Encore ?

PS : au fait, je te conseille de regarder la date des message sur lesquels tu postes (celui ci est l'exception), on risque de croire que tu veux placer un lien vers ton site, et on risque de virer ta signature.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer