2
0
forked from Wavyzz/dolibarr

Qual: Uniformisation de la maniere de recuperer le resultat de requete (suppression des methodes result au profit de la methode fetch_object)

This commit is contained in:
Laurent Destailleur
2006-06-24 19:47:36 +00:00
parent 04d6bd1e7a
commit 790469ee66
17 changed files with 464 additions and 485 deletions

View File

@@ -58,33 +58,34 @@ class DoliDb
var $ok;
var $error;
// Constantes pour conversion code erreur MySql en code erreur g<>n<EFBFBD>rique
var $errorcode_map = array(
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',
1025 => 'DB_ERROR_NO_FOREIGN_KEY_TO_DROP',
1046 => 'DB_ERROR_NODBSELECTED',
1048 => 'DB_ERROR_CONSTRAINT',
1050 => 'DB_ERROR_TABLE_ALREADY_EXISTS',
1051 => 'DB_ERROR_NOSUCHTABLE',
1054 => 'DB_ERROR_NOSUCHFIELD',
1060 => 'DB_ERROR_COLUMN_ALREADY_EXISTS',
1061 => 'DB_ERROR_KEY_NAME_ALREADY_EXISTS',
1062 => 'DB_ERROR_RECORD_ALREADY_EXISTS',
1064 => 'DB_ERROR_SYNTAX',
1075 => 'DB_ERROR_CANT_DROP_PRIMARY_KEY',
1091 => 'DB_ERROR_NOSUCHFIELD',
1100 => 'DB_ERROR_NOT_LOCKED',
1136 => 'DB_ERROR_VALUE_COUNT_ON_ROW',
1146 => 'DB_ERROR_NOSUCHTABLE',
1216 => 'DB_ERROR_NO_PARENT',
1217 => 'DB_ERROR_CHILD_EXISTS'
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',
1025 => 'DB_ERROR_NO_FOREIGN_KEY_TO_DROP',
1046 => 'DB_ERROR_NODBSELECTED',
1048 => 'DB_ERROR_CONSTRAINT',
1050 => 'DB_ERROR_TABLE_ALREADY_EXISTS',
1051 => 'DB_ERROR_NOSUCHTABLE',
1054 => 'DB_ERROR_NOSUCHFIELD',
1060 => 'DB_ERROR_COLUMN_ALREADY_EXISTS',
1061 => 'DB_ERROR_KEY_NAME_ALREADY_EXISTS',
1062 => 'DB_ERROR_RECORD_ALREADY_EXISTS',
1064 => 'DB_ERROR_SYNTAX',
1075 => 'DB_ERROR_CANT_DROP_PRIMARY_KEY',
1091 => 'DB_ERROR_NOSUCHFIELD',
1100 => 'DB_ERROR_NOT_LOCKED',
1136 => 'DB_ERROR_VALUE_COUNT_ON_ROW',
1146 => 'DB_ERROR_NOSUCHTABLE',
1216 => 'DB_ERROR_NO_PARENT',
1217 => 'DB_ERROR_CHILD_EXISTS'
);
/**
\brief Ouverture d'une connection vers le serveur et <20>ventuellement une database.
\param type Type de base de donn<6E>es (mysql ou pgsql)
@@ -168,6 +169,7 @@ class DoliDb
return $this->ok;
}
/**
\brief Selectionne une database.
\param database Nom de la database
@@ -178,6 +180,7 @@ class DoliDb
return mysql_select_db($database, $this->db);
}
/**
\brief Connection vers le serveur
\param host addresse de la base de donn<6E>es
@@ -204,8 +207,8 @@ class DoliDb
$row=$this->fetch_row($resql);
return $row[0];
}
/**
\brief Renvoie la version du serveur dans un tableau
\return array Tableau de chaque niveau de version
@@ -214,30 +217,8 @@ class DoliDb
{
return split('\.',$this->getVersion());
}
/**
\brief Renvoie l'id de la connection
\return string Id connection
*/
function getConnectId()
{
$resql=$this->query('SELECT CONNECTION_ID()');
$row=$this->fetch_row($resql);
return $row[0];
}
/**
\brief Renvoie la commande sql qui donne les droits sur les tables
\return string Requete sql
*/
function getGrantForUserQuery($databaseuser)
{
return '';
}
/**
\brief Cr<43>ation d'une nouvelle base de donn<6E>e
\param database nom de la database <20> cr<63>er
@@ -255,44 +236,16 @@ class DoliDb
$sql = 'CREATE DATABASE '.$database;
$ret=$this->query($sql);
}
//print "database=".$this->database_name." ret=".$ret." mysqlerror=".mysql_error($this->db);
return $ret;
}
/**
\brief Copie d'un handler de database.
\return resource
*/
function dbclone()
{
$db2 = new DoliDb("", "", "", "", "");
$db2->db = $this->db;
return $db2;
}
/**
\brief Ouverture d'une connection vers une database.
\param host Adresse de la base de donn<6E>es
\param login Nom de l'utilisateur autoris<69>
\param passwd Mot de passe
\param name Nom de la database (ne sert pas sous mysql, sert sous pgsql)
\return resource Handler d'acc<63>s <20> la base
*/
function pconnect($host, $login, $passwd, $name)
{
$this->db = mysql_pconnect($host, $login, $passwd);
return $this->db;
}
/**
\brief Fermeture d'une connection vers une database.
\return resource
*/
function close()
{
return mysql_close($this->db);
@@ -303,7 +256,6 @@ class DoliDb
\brief Debut d'une transaction.
\return int 1 si ouverture transaction ok ou deja ouverte, 0 en cas d'erreur
*/
function begin()
{
if (! $this->transaction_opened)
@@ -323,7 +275,6 @@ class DoliDb
\brief Validation d'une transaction
\return int 1 si validation ok ou niveau de transaction non ouverte, 0 en cas d'erreur
*/
function commit()
{
if ($this->transaction_opened<=1)
@@ -343,7 +294,6 @@ class DoliDb
\brief Annulation d'une transaction et retour aux anciennes valeurs
\return int 1 si annulation ok ou transaction non ouverte, 0 en cas d'erreur
*/
function rollback()
{
if ($this->transaction_opened<=1)
@@ -358,16 +308,78 @@ class DoliDb
return 1;
}
}
/**
\brief Effectue une requete et renvoi le resultset de r<>ponse de la base
\param query Contenu de la query
\return resource Resultset de la reponse
*/
function query($query)
{
$query = trim($query);
if (! $this->database_name)
{
// Ordre SQL ne n<>cessitant pas de connexion <20> une base (exemple: CREATE DATABASE)
$ret = mysql_query($query, $this->db);
}
else
{
$ret = mysql_db_query($this->database_name, $query, $this->db);
}
if (! eregi("^COMMIT",$query) && ! eregi("^ROLLBACK",$query))
{
// Si requete utilisateur, on la sauvegarde ainsi que son resultset
if (! $ret)
{
$this->lastqueryerror = $query;
$this->lasterror = $this->error();
$this->lasterrno = $this->errno();
}
$this->lastquery=$query;
$this->results = $ret;
}
return $ret;
}
// Next function are not required. Only minor features use them.
/**
\brief Renvoie l'id de la connection
\return string Id connection
*/
function getConnectId()
{
$resql=$this->query('SELECT CONNECTION_ID()');
$row=$this->fetch_row($resql);
return $row[0];
}
/**
\brief Renvoie la commande sql qui donne les droits sur les tables
\return string Requete sql
*/
function getGrantForUserQuery($databaseuser)
{
return '';
}
/**
\brief Cr<43>e une table
\param table Nom de la table
\param fields tableau associatif [nom champ][tableau des descriptions]
\param primary_key Nom du champ qui sera la clef primaire
\param unique_keys tableau associatifs Nom de champs qui seront clef unique => valeur
\param fulltext tableau des Nom de champs qui seront index<65>s en fulltext
\param key tableau des champs cl<63>s noms => valeur
\param type type de la table
\return true/false selon si requ<71>te a provoqu<71> un erreur mysql ou pas
\brief Cr<43>e une table
\param table Nom de la table
\param fields tableau associatif [nom champ][tableau des descriptions]
\param primary_key Nom du champ qui sera la clef primaire
\param unique_keys tableau associatifs Nom de champs qui seront clef unique => valeur
\param fulltext tableau des Nom de champs qui seront index<65>s en fulltext
\param key tableau des champs cl<63>s noms => valeur
\param type type de la table
\return true/false selon si requ<71>te a provoqu<71> un erreur mysql ou pas
*/
function create_table($table,$fields,$primary_key,$type,$unique_keys="",$fulltext_keys="",$keys="")
{
@@ -392,14 +404,14 @@ class DoliDb
}
else if( eregi("^[^ ]",$field_desc['null']))
$sqlfields[$i] .= " ".$field_desc['null'];
else if( eregi("^[^ ]",$field_desc['extra']))
$sqlfields[$i] .= " ".$field_desc['extra'];
$i++;
}
if($primary_key != "")
$pk = "primary key(".$primary_key.")";
if($unique_keys != "")
{
$i = 0;
@@ -432,13 +444,14 @@ class DoliDb
else
return true;
}
/**
\brief Ins<6E>re un nouveau champ dans une table
\param table Nom de la table
\param field_name Nom du champ <20> ins<6E>rer
\param field_desc tableau associatif de description duchamp <20> ins<6E>rer[nom du param<61>tre][valeur du param<61>tre]
\param field_position Optionnel ex.: "after champtruc"
\return true/false selon si requ<71>te a provoqu<71> un erreur mysql ou pas
\brief Ins<6E>re un nouveau champ dans une table
\param table Nom de la table
\param field_name Nom du champ <20> ins<6E>rer
\param field_desc tableau associatif de description duchamp <20> ins<6E>rer[nom du param<61>tre][valeur du param<61>tre]
\param field_position Optionnel ex.: "after champtruc"
\return true/false selon si requ<71>te a provoqu<71> un erreur mysql ou pas
*/
function add_field($table,$field_name,$field_desc,$field_position="")
{
@@ -460,65 +473,19 @@ class DoliDb
if( eregi("^[^ ]",$field_desc['extra']))
$sql .= " ".$field_desc['extra'];
$sql .= " ".$field_position;
if(! $this -> query($sql))
return false;
else
return true;
}
/**
\brief Effectue une requete et renvoi le resultset de r<>ponse de la base
\param query Contenu de la query
\return resource Resultset de la reponse
*/
function query($query)
{
$query = trim($query);
if (! $this->database_name)
{
// Ordre SQL ne n<>cessitant pas de connexion <20> une base (exemple: CREATE DATABASE)
$ret = mysql_query($query, $this->db);
}
else
{
$ret = mysql_db_query($this->database_name, $query, $this->db);
}
if (! eregi("^COMMIT",$query) && ! eregi("^ROLLBACK",$query))
{
// Si requete utilisateur, on la sauvegarde ainsi que son resultset
if (! $ret)
{
$this->lastqueryerror = $query;
$this->lasterror = $this->error();
$this->lasterrno = $this->errno();
}
$this->lastquery=$query;
$this->results = $ret;
}
return $ret;
}
/**
\brief Renvoie les donn<6E>es de la requete.
\param nb Contenu de la query
\param fieldname Nom du champ
\return resource
*/
function result($nb, $fieldname)
{
return mysql_result($this->results, $nb, $fieldname);
}
/**
\brief Renvoie la ligne courante (comme un objet) pour le curseur resultset.
\param resultset Curseur de la requete voulue
\return resource
*/
function fetch_object($resultset=0)
{
// Si le resultset n'est pas fourni, on prend le dernier utilis<69> sur cette connexion
@@ -685,7 +652,7 @@ class DoliDb
{
return 'IF('.$test.','.$resok.','.$resko.')';
}
/**
\brief Renvoie la derniere requete soumise par la methode query()
@@ -818,13 +785,13 @@ class DoliDb
function fetch_all_rows($sql, &$datas)
{
$datas = array();
$resql = $this->query($sql);
if ($resql)
{
$i = 0;
$num = $this->num_rows($resql);
while ($i < $num)
{
$row = $this->fetch_row($resql);