Ajout syslog et indentation du codec

This commit is contained in:
Rodolphe Quiedeville 2005-02-14 14:31:43 +00:00
parent 66342a0ac4
commit b563016760

View File

@ -1,6 +1,6 @@
<?php <?php
/* Copyright (C) 2001 Fabien Seisen <seisen@linuxfr.org> /* Copyright (C) 2001 Fabien Seisen <seisen@linuxfr.org>
* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> * Copyright (C) 2002-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
* Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> * Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -22,485 +22,488 @@
* *
*/ */
/** \file htdocs/lib/mysql.lib.php /**
\brief Fichier de la classe permettant de gérér la database de dolibarr. \file htdocs/lib/mysql.lib.php
\author Fabien Seisen \brief Fichier de la classe permettant de gérer une base mysql
\author Rodolphe Quiedeville. \author Fabien Seisen
\author Laurent Destailleur. \author Rodolphe Quiedeville.
\version $Revision$ \author Laurent Destailleur.
\version $Revision$
*/ */
/** \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
*/ */
class DoliDb class DoliDb
{ {
var $db; // Handler de base var $db; // Handler de base
var $results; // Resultset de la dernière requete var $results; // Resultset de la dernière requete
var $connected; // 1 si connecté, 0 sinon var $connected; // 1 si connecté, 0 sinon
var $database_selected; // 1 si base sélectionné, 0 sinon var $database_selected; // 1 si base sélectionné, 0 sinon
var $transaction_opened; // 1 si une transaction est en cours, 0 sinon var $transaction_opened; // 1 si une transaction est en cours, 0 sinon
var $ok; var $ok;
// Constantes pour code erreurs // Constantes pour code erreurs
var $ERROR_DUPLICATE=1062; var $ERROR_DUPLICATE=1062;
var $ERROR_TABLEEXISTS=1050; var $ERROR_TABLEEXISTS=1050;
/** /**
\brief Ouverture d'une connection vers le serveur et éventuellement une database. \brief Ouverture d'une connection vers le serveur et éventuellement une database.
\param type type de base de données (mysql ou pgsql) \param type type de base de données (mysql ou pgsql)
\param host addresse de la base de données \param host addresse de la base de données
\param user nom de l'utilisateur autorisé \param user nom de l'utilisateur autorisé
\param pass mot de passe \param pass mot de passe
\param name nom de la database \param name nom de la database
\return int 1 en cas de succès, 0 sinon \return int 1 en cas de succès, 0 sinon
*/ */
function DoliDb($type = 'mysql', $host = '', $user = '', $pass = '', $name = '') function DoliDb($type = 'mysql', $host = '', $user = '', $pass = '', $name = '')
{ {
global $conf; global $conf;
$this->transaction_opened=0; $this->transaction_opened=0;
if ($host == '') $host = $conf->db->host; if ($host == '') $host = $conf->db->host;
if ($user == '') $user = $conf->db->user; if ($user == '') $user = $conf->db->user;
if ($pass == '') $pass = $conf->db->pass; if ($pass == '') $pass = $conf->db->pass;
if ($name == '') $name = $conf->db->name; if ($name == '') $name = $conf->db->name;
//print "Name DB: $host,$user,$pass,$name<br>"; //print "Name DB: $host,$user,$pass,$name<br>";
// Essai connexion serveur // Essai connexion serveur
$this->db = $this->connect($host, $user, $pass); $this->db = $this->connect($host, $user, $pass);
if ($this->db) if ($this->db)
{ {
$this->connected = 1; $this->connected = 1;
$this->ok = 1; $this->ok = 1;
} }
else else
{ {
$this->connected = 0; $this->connected = 0;
$this->ok = 0; $this->ok = 0;
} dolibarr_syslog("DoliDB::DoliDB : Erreur Connect");
}
// Si connexion serveur ok et si connexion base demandée, on essaie connexion base // Si connexion serveur ok et si connexion base demandée, on essaie connexion base
if ($this->connected && $name) if ($this->connected && $name)
{ {
if ($this->select_db($name) == 1) if ($this->select_db($name) == 1)
{ {
$this->database_selected = 1; $this->database_selected = 1;
$this->ok = 1; $this->ok = 1;
} }
else else
{ {
$this->database_selected = 0; $this->database_selected = 0;
$this->ok = 0; $this->ok = 0;
} dolibarr_syslog("DoliDB::DoliDB : Erreur Select_db");
} }
else }
{ else
// Pas de selection de base demandée, ok ou ko {
$this->database_selected = 0; // Pas de selection de base demandée, ok ou ko
} $this->database_selected = 0;
}
return $this->ok; return $this->ok;
}
/**
\brief Selectionne une database.
\param database nom de la database
\return resource
*/
function select_db($database)
{
return mysql_select_db($database, $this->db);
}
/**
\brief Connection vers le serveur
\param host addresse de la base de données
\param login nom de l'utilisateur autoris
\param passwd mot de passe
\return resource handler d'accès à la base
*/
function connect($host, $login, $passwd)
{
$this->db = @mysql_connect($host, $login, $passwd);
//print "Resultat fonction connect: ".$this->db;
return $this->db;
}
/**
\brief Connexion sur une base de donnée
\param database nom de la database
\return result resultat 1 pour ok, 0 pour non ok
*/
function create_db($database)
{
if (mysql_create_db ($database, $this->db))
{
return 1;
}
else
{
return 0;
}
}
/**
\brief Copie d'un handler de database.
\return resource
*/
function clone()
{
$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ées
\param login Nom de l'utilisateur autorisé
\param passwd Mot de passe
\return resource handler d'accès à la base
*/
function pconnect($host, $login, $passwd)
{
$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);
}
/**
\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)
{
$ret=$this->query("BEGIN");
if ($ret) $this->transaction_opened++;
return $ret;
}
else
{
$this->transaction_opened++;
return 1;
}
}
/**
\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)
{
$ret=$this->query("COMMIT");
if ($ret) $this->transaction_opened=0;
return $ret;
}
else
{
$this->transaction_opened--;
return 1;
}
}
/**
\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)
{
$ret=$this->query("ROLLBACK");
$this->transaction_opened=0;
return $ret;
}
else
{
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);
$ret = mysql_query($query, $this->db);
if (! eregi("^COMMIT",$query) && ! eregi("^ROLLBACK",$query)) {
// Si requete utilisateur, on la sauvegarde ainsi que son resultset
$this->lastquery=$query;
$this->results = $ret;
} }
/** return $ret;
\brief Selectionne une database. }
\param database nom de la database
\return resource
*/
function select_db($database) /**
{ \brief Renvoie les données de la requete.
return mysql_select_db($database, $this->db); \param nb Contenu de la query
} \param fieldname Nom du champ
\return resource
*/
/** function result($nb, $fieldname)
\brief Connection vers le serveur {
\param host addresse de la base de données return mysql_result($this->results, $nb, $fieldname);
\param login nom de l'utilisateur autoris }
\param passwd mot de passe
\return resource handler d'accès à la base
*/
function connect($host, $login, $passwd) /**
{ \brief Renvoie la ligne courante (comme un objet) pour le curseur resultset.
$this->db = @mysql_connect($host, $login, $passwd); \param resultset Curseur de la requete voulue
//print "Resultat fonction connect: ".$this->db; \return resource
return $this->db; */
}
/** function fetch_object($resultset=0)
\brief Connexion sur une base de donnée {
\param database nom de la database // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
\return result resultat 1 pour ok, 0 pour non ok if (! is_resource($resultset)) { $resultset=$this->results; }
*/ return mysql_fetch_object($resultset);
}
function create_db($database) /**
{ \brief Renvoie les données dans un tableau.
if (mysql_create_db ($database, $this->db)) \param resultset Curseur de la requete voulue
{ \return array
return 1; */
}
else
{
return 0;
}
}
/** function fetch_array($resultset=0)
\brief Copie d'un handler de database. {
\return resource // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
*/ if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_fetch_array($resultset);
}
function clone() /**
{ \brief Renvoie les données comme un tableau.
$db2 = new DoliDb("", "", "", "", ""); \param resultset Curseur de la requete voulue
$db2->db = $this->db; \return array
return $db2; */
}
/** function fetch_row($resultset=0)
\brief Ouverture d'une connection vers une database. {
\param host Adresse de la base de données // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
\param login Nom de l'utilisateur autorisé if (! is_resource($resultset)) { $resultset=$this->results; }
\param passwd Mot de passe return mysql_fetch_row($resultset);
\return resource handler d'accès à la base }
*/
function pconnect($host, $login, $passwd) /**
{ \brief Obtient les données d'un colonne et renvoie les données sous forme d'objet.
$this->db = mysql_pconnect($host, $login, $passwd); \param resultset Curseur de la requete voulue
return $this->db; \return array
} */
/** function fetch_field($resultset=0)
\brief Fermeture d'une connection vers une database. {
\return resource // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
*/ if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_fetch_field($resultset);
}
function close() /**
{ \brief Renvoie le nombre de lignes dans le resultat d'une requete SELECT
return mysql_close($this->db); \see affected_rows
} \param resultset Curseur de la requete voulue
\return int Nombre de lignes
*/
function num_rows($resultset=0)
{
// Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_num_rows($resultset);
}
/**
\brief Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE
\see num_rows
\param resultset Curseur de la requete voulue
\return int Nombre de lignes
*/
function affected_rows($resultset=0)
{
// Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
// mysql necessite un link de base pour cette fonction contrairement
// a pqsql qui prend un resultset
return mysql_affected_rows($this->db);
}
/** /**
\brief Debut d'une transaction. \brief Renvoie le nombre de champs dans le resultat de la requete.
\return int 1 si ouverture transaction ok ou deja ouverte, 0 en cas d'erreur \param resultset Curseur de la requete voulue
*/ \return int
*/
function begin() function num_fields($resultset=0)
{ {
if (! $this->transaction_opened) // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
{ if (! is_resource($resultset)) { $resultset=$this->results; }
$ret=$this->query("BEGIN"); return mysql_num_fields($resultset);
if ($ret) $this->transaction_opened++; }
return $ret;
}
else
{
$this->transaction_opened++;
return 1;
}
}
/** /**
\brief Validation d'une transaction \brief Libère le dernier resultset utilisé sur cette connexion.
\return int 1 si validation ok ou niveau de transaction non ouverte, 0 en cas d'erreur \param resultset Curseur de la requete voulue
*/ \return resource
*/
function commit() function free($resultset=0)
{ {
if ($this->transaction_opened==1) // Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
{ if (! is_resource($resultset)) { $resultset=$this->results; }
$ret=$this->query("COMMIT"); return mysql_free_result($resultset);
if ($ret) $this->transaction_opened=0; }
return $ret;
}
else
{
$this->transaction_opened--;
return 1;
}
}
/** /**
\brief Annulation d'une transaction et retour aux anciennes valeurs \brief Défini les limites de la requète.
\return int 1 si annulation ok ou transaction non ouverte, 0 en cas d'erreur \param limit
*/ \param offset
\return int Limite
*/
function rollback() function plimit($limit=0,$offset=0)
{ {
if ($this->transaction_opened) if ($offset > 0)
{ {
$ret=$this->query("ROLLBACK"); return " LIMIT $offset,$limit ";
$this->transaction_opened=0; }
return $ret; else
} {
else return " LIMIT $limit ";
{ }
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);
$ret = mysql_query($query, $this->db);
if (! eregi("^COMMIT",$query) && ! eregi("^ROLLBACK",$query)) {
// Si requete utilisateur, on la sauvegarde ainsi que son resultset
$this->lastquery=$query;
$this->results = $ret;
}
return $ret;
}
/**
\brief Renvoie les donné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é sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_fetch_object($resultset);
}
/**
\brief Renvoie les données dans un tableau.
\param resultset Curseur de la requete voulue
\return array
*/
function fetch_array($resultset=0)
{
// Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_fetch_array($resultset);
}
/**
\brief Renvoie les données comme un tableau.
\param resultset Curseur de la requete voulue
\return array
*/
function fetch_row($resultset=0)
{
// Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_fetch_row($resultset);
}
/**
\brief Obtient les données d'un colonne et renvoie les données sous forme d'objet.
\param resultset Curseur de la requete voulue
\return array
*/
function fetch_field($resultset=0)
{
// Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_fetch_field($resultset);
}
/**
\brief Renvoie le nombre de lignes dans le resultat d'une requete SELECT
\see affected_rows
\param resultset Curseur de la requete voulue
\return int Nombre de lignes
*/
function num_rows($resultset=0)
{
// Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
return mysql_num_rows($resultset);
}
/**
\brief Renvoie le nombre de lignes dans le resultat d'une requete INSERT, DELETE ou UPDATE
\see num_rows
\param resultset Curseur de la requete voulue
\return int Nombre de lignes
*/
function affected_rows($resultset=0)
{
// Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion
if (! is_resource($resultset)) { $resultset=$this->results; }
// mysql necessite un link de base pour cette fonction contrairement
// a pqsql qui prend un resultset
return mysql_affected_rows($this->db);
}
/** /**
\brief Renvoie le nombre de champs dans le resultat de la requete. \brief Formatage par la base de données d'un champ de la base au format Timestamp ou Date (YYYY-MM-DD HH:MM:SS)
\param resultset Curseur de la requete voulue afin de retourner une donnée toujours au format universel date tms unix.
\return int \param fname
*/ \return date
*/
function pdate($fname)
{
return "unix_timestamp($fname)";
}
function num_fields($resultset=0) /**
{ \brief Formatage de la date en fonction des locales.
// Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion \param fname
if (! is_resource($resultset)) { $resultset=$this->results; } \return date
return mysql_num_fields($resultset); */
} function idate($fname)
{
return strftime("%Y%m%d%H%M%S",$fname);
}
/** /**
\brief Libère le dernier resultset utilisé sur cette connexion. \brief Renvoie la derniere requete soumise par la methode query()
\param resultset Curseur de la requete voulue \return lastquery
\return resource */
*/
function free($resultset=0) function lastquery()
{ {
// Si le resultset n'est pas fourni, on prend le dernier utilisé sur cette connexion return $this->lastquery;
if (! is_resource($resultset)) { $resultset=$this->results; } }
return mysql_free_result($resultset);
}
/** /**
\brief Défini les limites de la requète. \brief Renvoie le texte de l'erreur mysql de l'operation precedente.
\param limit \return error_text
\param offset */
\return int Limite
*/
function plimit($limit=0,$offset=0) function error()
{ {
if ($offset > 0) return mysql_error($this->db);
{ }
return " LIMIT $offset,$limit ";
}
else
{
return " LIMIT $limit ";
}
}
/**
\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()
\brief Formatage par la base de données d'un champ de la base au format Timestamp ou Date (YYYY-MM-DD HH:MM:SS) {
afin de retourner une donnée toujours au format universel date tms unix. // $ERROR_DUPLICATE=1062;
\param fname // $ERROR_TABLEEXISTS=1050;
\return date return mysql_errno($this->db);
*/ }
function pdate($fname)
{
return "unix_timestamp($fname)";
}
/** /**
\brief Formatage de la date en fonction des locales. \brief Obtient l'id genéré par le dernier INSERT.
\param fname \return id
\return date */
*/
function idate($fname)
{
return strftime("%Y%m%d%H%M%S",$fname);
}
/** function last_insert_id()
\brief Renvoie la derniere requete soumise par la methode query() {
\return lastquery return mysql_insert_id($this->db);
*/ }
function lastquery() /**
{ \brief Retourne le dsn pear
return $this->lastquery; \return dsn
} */
/** function getdsn($db_type,$db_user,$db_pass,$db_host,$dbname)
\brief Renvoie le texte de l'erreur mysql de l'operation precedente. {
\return error_text $pear = $db_type.'://'.$db_user.':'.$db_pass.'@'.
*/ $db_host.'/'.$db_name;
function error() return $pear;
{ }
return mysql_error($this->db);
}
/** /**
\brief Renvoie la valeur numerique de l'erreur de l'operation precedente. \brief Liste des tables dans une database.
pour etre exploiter par l'appelant et détecter les erreurs du genre: \param database Nom de la database
echec car doublons, table deja existante... \return resource
\return error_num */
*/
function errno() function list_tables($database)
{ {
// $ERROR_DUPLICATE=1062; $this->results = mysql_list_tables($database, $this->db);
// $ERROR_TABLEEXISTS=1050; return $this->results;
return mysql_errno($this->db); }
}
/**
\brief Obtient l'id genéré par le dernier INSERT.
\return id
*/
function last_insert_id()
{
return mysql_insert_id($this->db);
}
/**
\brief Retourne le dsn pear
\return dsn
*/
function getdsn($db_type,$db_user,$db_pass,$db_host,$dbname)
{
$pear = $db_type.'://'.$db_user.':'.$db_pass.'@'.
$db_host.'/'.$db_name;
return $pear;
}
/**
\brief Liste des tables dans une database.
\param database Nom de la database
\return resource
*/
function list_tables($database)
{
$this->results = mysql_list_tables($database, $this->db);
return $this->results;
}
} }