Qual: Les codes erreurs des requetes est remplacé par l'équivalent générique, ce qui permet compatibilité des gestions d'erreurs entre mysql et pgsql.

This commit is contained in:
Laurent Destailleur 2005-02-15 22:13:41 +00:00
parent 18834d28c6
commit 6eeda3819b
6 changed files with 48 additions and 34 deletions

View File

@ -181,7 +181,7 @@ if ($_POST["actionadd"]) {
$result = $db->query($sql); $result = $db->query($sql);
if (!$result) if (!$result)
{ {
if ($db->errno() == $db->ERROR_DUPLICATE) { if ($db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS) {
$msg="Une entrée pour cette clé existe déjà<br>"; $msg="Une entrée pour cette clé existe déjà<br>";
} }
else { else {

View File

@ -135,7 +135,7 @@ class FactureFourn
} }
else else
{ {
if ($this->db->errno() == $this->db->ERROR_DUPLICATE) { if ($this->db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS) {
print "Erreur : Une facture possédant cet id existe déjà"; print "Erreur : Une facture possédant cet id existe déjà";
} }
else { else {

View File

@ -23,17 +23,18 @@
*/ */
/** /**
\file htdocs/lib/mysql.lib.php \file htdocs/lib/mysql.lib.php
\brief Fichier de la classe permettant de gérer une base mysql \brief Fichier de la classe permettant de gérer une base mysql
\author Fabien Seisen \author Fabien Seisen
\author Rodolphe Quiedeville. \author Rodolphe Quiedeville.
\author Laurent Destailleur. \author Laurent Destailleur.
\version $Revision$ \version $Revision$
*/ */
/** \class DoliDb /**
\brief Classe permettant de gérér la database de dolibarr \class DoliDb
\brief Classe permettant de gérér la database de dolibarr
*/ */
class DoliDb class DoliDb
@ -47,10 +48,24 @@ class DoliDb
var $ok; var $ok;
// Constantes pour code erreurs // Constantes pour conversion code erreur MySql en code erreur générique
var $ERROR_DUPLICATE=1062; var $errorcode_map = array(
var $ERROR_TABLEEXISTS=1050; 1004 => DB_ERROR_CANNOT_CREATE,
1005 => DB_ERROR_CANNOT_CREATE,
1006 => DB_ERROR_CANNOT_CREATE,
1007 => DB_ERROR_ALREADY_EXISTS,
1008 => DB_ERROR_CANNOT_DROP,
1046 => DB_ERROR_NODBSELECTED,
1050 => DB_ERROR_TABLE_ALREADY_EXISTS,
1051 => DB_ERROR_NOSUCHTABLE,
1054 => DB_ERROR_NOSUCHFIELD,
1062 => DB_ERROR_RECORD_ALREADY_EXISTS,
1064 => DB_ERROR_SYNTAX,
1100 => DB_ERROR_NOT_LOCKED,
1136 => DB_ERROR_VALUE_COUNT_ON_ROW,
1146 => DB_ERROR_NOSUCHTABLE,
1048 => DB_ERROR_CONSTRAINT,
);
/** /**
\brief Ouverture d'une connection vers le serveur et éventuellement une database. \brief Ouverture d'une connection vers le serveur et éventuellement une database.
@ -447,8 +462,21 @@ class DoliDb
} }
/** /**
\brief Renvoie le texte de l'erreur mysql de l'operation precedente. \brief Renvoie le code erreur generique de l'operation precedente.
\return error_text \return error_num (Exemples: DB_ERROR_TABLE_ALREADY_EXISTS, DB_ERROR_RECORD_ALREADY_EXISTS...)
*/
function errno()
{
if (isset($this->errorcode_map[mysql_errno($this->db)])) {
return $this->errorcode_map[mysql_errno($this->db)];
}
return DB_ERROR;
}
/**
\brief Renvoie le texte de l'erreur mysql de l'operation precedente.
\return error_text
*/ */
function error() function error()
@ -456,20 +484,6 @@ class DoliDb
return mysql_error($this->db); return mysql_error($this->db);
} }
/**
\brief Renvoie la valeur numerique de l'erreur de l'operation precedente.
pour etre exploiter par l'appelant et détecter les erreurs du genre:
echec car doublons, table deja existante...
\return error_num
*/
function errno()
{
// $ERROR_DUPLICATE=1062;
// $ERROR_TABLEEXISTS=1050;
return mysql_errno($this->db);
}
/** /**
\brief Obtient l'id genéré par le dernier INSERT. \brief Obtient l'id genéré par le dernier INSERT.
\return id \return id

View File

@ -465,7 +465,7 @@ class DoliDb
$error_regexps = array( $error_regexps = array(
'/(Table does not exist\.|Relation [\"\'].*[\"\'] does not exist|sequence does not exist|class ".+" not found)$/' => DB_ERROR_NOSUCHTABLE, '/(Table does not exist\.|Relation [\"\'].*[\"\'] does not exist|sequence does not exist|class ".+" not found)$/' => DB_ERROR_NOSUCHTABLE,
'/table [\"\'].*[\"\'] does not exist/' => DB_ERROR_NOSUCHTABLE, '/table [\"\'].*[\"\'] does not exist/' => DB_ERROR_NOSUCHTABLE,
'/Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*/' => DB_ERROR_ALREADY_EXISTS, '/Relation [\"\'].*[\"\'] already exists|Cannot insert a duplicate key into (a )?unique index.*/' => DB_ERROR_RECORD_ALREADY_EXISTS,
'/divide by zero$/' => DB_ERROR_DIVZERO, '/divide by zero$/' => DB_ERROR_DIVZERO,
'/pg_atoi: error in .*: can\'t parse /' => DB_ERROR_INVALID_NUMBER, '/pg_atoi: error in .*: can\'t parse /' => DB_ERROR_INVALID_NUMBER,
'/ttribute [\"\'].*[\"\'] not found$|Relation [\"\'].*[\"\'] does not have attribute [\"\'].*[\"\']/' => DB_ERROR_NOSUCHFIELD, '/ttribute [\"\'].*[\"\'] not found$|Relation [\"\'].*[\"\'] does not have attribute [\"\'].*[\"\']/' => DB_ERROR_NOSUCHFIELD,

View File

@ -188,7 +188,7 @@ class Product
} }
else else
{ {
if ($this->db->errno() == $this->db->ERROR_DUPLICATE) { if ($this->db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS) {
$this->mesg_error=$langs->trans("Error")." : ".$langs->trans("ErrorProductAlreadyExists",$this->ref); $this->mesg_error=$langs->trans("Error")." : ".$langs->trans("ErrorProductAlreadyExists",$this->ref);
return -1; return -1;
} }

View File

@ -139,7 +139,7 @@ class Societe {
} }
else else
{ {
if ($this->db->errno() == $this->db->ERROR_DUPLICATE) if ($this->db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS)
{ {
$this->error=$langs->trans("ErrorCompanyNameAlreadyExists",$this->nom); $this->error=$langs->trans("ErrorCompanyNameAlreadyExists",$this->nom);
} }
@ -348,7 +348,7 @@ class Societe {
} }
else else
{ {
if ($this->db->errno() == $this->db->ERROR_DUPLICATE) if ($this->db->errno() == DB_ERROR_RECORD_ALREADY_EXISTS)
{ {
// Doublon // Doublon
$this->error = $langs->trans("ErrorPrefixAlreadyExists",$this->prefix_comm); $this->error = $langs->trans("ErrorPrefixAlreadyExists",$this->prefix_comm);