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

@ -32,7 +32,8 @@
*/ */
/** \class DoliDb /**
\class DoliDb
\brief Classe permettant de gérér la database de dolibarr \brief Classe permettant de gérér la database de dolibarr
*/ */
@ -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.
@ -446,6 +461,19 @@ class DoliDb
return $this->lastquery; return $this->lastquery;
} }
/**
\brief Renvoie le code erreur generique de l'operation precedente.
\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. \brief Renvoie le texte de l'erreur mysql de l'operation precedente.
\return error_text \return error_text
@ -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);