forked from Wavyzz/dolibarr
Used OOP for mysqli connector
Better error handling Slightly more readable codebase
This commit is contained in:
@@ -31,6 +31,8 @@ require_once DOL_DOCUMENT_ROOT .'/core/db/DoliDB.class.php';
|
|||||||
*/
|
*/
|
||||||
class DoliDBMysqli extends DoliDB
|
class DoliDBMysqli extends DoliDB
|
||||||
{
|
{
|
||||||
|
/** @var mysqli Database object */
|
||||||
|
public $db;
|
||||||
//! Database type
|
//! Database type
|
||||||
public $type='mysqli';
|
public $type='mysqli';
|
||||||
//! Database label
|
//! Database label
|
||||||
@@ -81,29 +83,26 @@ class DoliDBMysqli extends DoliDB
|
|||||||
$this->connected = false;
|
$this->connected = false;
|
||||||
$this->ok = false;
|
$this->ok = false;
|
||||||
$this->error=$langs->trans("ErrorWrongHostParameter");
|
$this->error=$langs->trans("ErrorWrongHostParameter");
|
||||||
dol_syslog(get_class($this)."::DoliDBMysqli : Erreur Connect, wrong host parameters",LOG_ERR);
|
dol_syslog(get_class($this)."::DoliDBMysqli : Connect error, wrong host parameters",LOG_ERR);
|
||||||
return $this->ok;
|
return $this->ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Essai connexion serveur
|
// Try server connection
|
||||||
// We do not try to connect to database, only to server. Connect to database is done later in constrcutor
|
// We do not try to connect to database, only to server. Connect to database is done later in constrcutor
|
||||||
$this->db = $this->connect($host, $user, $pass, '', $port);
|
$this->db = $this->connect($host, $user, $pass, '', $port);
|
||||||
|
|
||||||
if ($this->db)
|
if ($this->db->connect_errno) {
|
||||||
{
|
$this->connected = false;
|
||||||
|
$this->ok = false;
|
||||||
|
$this->error = $this->db->connect_error;
|
||||||
|
dol_syslog(get_class($this) . "::DoliDBMysqli Connect error: " . $this->error, LOG_ERR);
|
||||||
|
return $this->ok;
|
||||||
|
} else {
|
||||||
$this->connected = true;
|
$this->connected = true;
|
||||||
$this->ok = true;
|
$this->ok = true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// host, login ou password incorrect
|
|
||||||
$this->connected = false;
|
|
||||||
$this->ok = false;
|
|
||||||
$this->error=mysqli_connect_error();
|
|
||||||
dol_syslog(get_class($this)."::DoliDBMysqli : Erreur Connect mysqli_connect_error=".$this->error,LOG_ERR);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Si connexion serveur ok et si connexion base demandee, on essaie connexion base
|
// If server connection is ok, we try to connect to the database
|
||||||
if ($this->connected && $name)
|
if ($this->connected && $name)
|
||||||
{
|
{
|
||||||
if ($this->select_db($name))
|
if ($this->select_db($name))
|
||||||
@@ -116,7 +115,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
$clientmustbe='';
|
$clientmustbe='';
|
||||||
if (preg_match('/UTF-8/i',$conf->file->character_set_client)) $clientmustbe='utf8';
|
if (preg_match('/UTF-8/i',$conf->file->character_set_client)) $clientmustbe='utf8';
|
||||||
if (preg_match('/ISO-8859-1/i',$conf->file->character_set_client)) $clientmustbe='latin1';
|
if (preg_match('/ISO-8859-1/i',$conf->file->character_set_client)) $clientmustbe='latin1';
|
||||||
if (mysqli_character_set_name($this->db) != $clientmustbe)
|
if ($this->db->character_set_name() != $clientmustbe)
|
||||||
{
|
{
|
||||||
$this->query("SET NAMES '".$clientmustbe."'", $this->db);
|
$this->query("SET NAMES '".$clientmustbe."'", $this->db);
|
||||||
//$this->query("SET CHARACTER SET ". $this->forcecharset);
|
//$this->query("SET CHARACTER SET ". $this->forcecharset);
|
||||||
@@ -128,7 +127,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
$this->database_name = '';
|
$this->database_name = '';
|
||||||
$this->ok = false;
|
$this->ok = false;
|
||||||
$this->error=$this->error();
|
$this->error=$this->error();
|
||||||
dol_syslog(get_class($this)."::DoliDBMysqli : Erreur Select_db ".$this->error,LOG_ERR);
|
dol_syslog(get_class($this)."::DoliDBMysqli : Select_db error ".$this->error,LOG_ERR);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -142,7 +141,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
$clientmustbe='';
|
$clientmustbe='';
|
||||||
if (preg_match('/UTF-8/i',$conf->file->character_set_client)) $clientmustbe='utf8';
|
if (preg_match('/UTF-8/i',$conf->file->character_set_client)) $clientmustbe='utf8';
|
||||||
if (preg_match('/ISO-8859-1/i',$conf->file->character_set_client)) $clientmustbe='latin1';
|
if (preg_match('/ISO-8859-1/i',$conf->file->character_set_client)) $clientmustbe='latin1';
|
||||||
if (mysqli_character_set_name($this->db) != $clientmustbe)
|
if ($this->db->character_set_name() != $clientmustbe)
|
||||||
{
|
{
|
||||||
$this->query("SET NAMES '".$clientmustbe."'", $this->db);
|
$this->query("SET NAMES '".$clientmustbe."'", $this->db);
|
||||||
//$this->query("SET CHARACTER SET ". $this->forcecharset);
|
//$this->query("SET CHARACTER SET ". $this->forcecharset);
|
||||||
@@ -175,35 +174,26 @@ class DoliDBMysqli extends DoliDB
|
|||||||
function select_db($database)
|
function select_db($database)
|
||||||
{
|
{
|
||||||
dol_syslog(get_class($this)."::select_db database=".$database, LOG_DEBUG);
|
dol_syslog(get_class($this)."::select_db database=".$database, LOG_DEBUG);
|
||||||
return mysqli_select_db($this->db,$database);
|
return $this->db->select_db($database);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connexion to server
|
* Connect to server
|
||||||
*
|
*
|
||||||
* @param string $host database server host
|
* @param string $host database server host
|
||||||
* @param string $login login
|
* @param string $login login
|
||||||
* @param string $passwd password
|
* @param string $passwd password
|
||||||
* @param string $name name of database (not used for mysql, used for pgsql)
|
* @param string $name name of database (not used for mysql, used for pgsql)
|
||||||
* @param integer $port Port of database server
|
* @param integer $port Port of database server
|
||||||
* @return mysqli Database access handler
|
* @return mysqli Database access object
|
||||||
* @see close
|
* @see close
|
||||||
*/
|
*/
|
||||||
function connect($host, $login, $passwd, $name, $port = 0)
|
function connect($host, $login, $passwd, $name, $port = 0)
|
||||||
{
|
{
|
||||||
dol_syslog(get_class($this) . "::connect host=$host, port=$port, login=$login, passwd=--hidden--, name=$name", LOG_DEBUG);
|
dol_syslog(get_class($this) . "::connect host=$host, port=$port, login=$login, passwd=--hidden--, name=$name", LOG_DEBUG);
|
||||||
|
|
||||||
$newhost=$host;
|
return new mysqli($host, $login, $passwd, $name, $port);
|
||||||
$newport=$port;
|
|
||||||
|
|
||||||
// With mysqli, port must be in connect parameters
|
|
||||||
if (! $newport) $newport=3306;
|
|
||||||
|
|
||||||
$this->db = @mysqli_connect($newhost, $login, $passwd, $name, $newport);
|
|
||||||
|
|
||||||
//print "Resultat fonction connect: ".$this->db;
|
|
||||||
return $this->db;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -213,7 +203,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
*/
|
*/
|
||||||
function getVersion()
|
function getVersion()
|
||||||
{
|
{
|
||||||
return mysqli_get_server_info($this->db);
|
return $this->db->get_server_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -223,7 +213,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
*/
|
*/
|
||||||
function getDriverInfo()
|
function getDriverInfo()
|
||||||
{
|
{
|
||||||
return mysqli_get_client_info($this->db);
|
return $this->db->get_client_info();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -239,7 +229,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
{
|
{
|
||||||
if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened,LOG_ERR);
|
if ($this->transaction_opened > 0) dol_syslog(get_class($this)."::close Closing a connection with an opened transaction depth=".$this->transaction_opened,LOG_ERR);
|
||||||
$this->connected=false;
|
$this->connected=false;
|
||||||
return mysqli_close($this->db);
|
return $this->db->close();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -264,11 +254,11 @@ class DoliDBMysqli extends DoliDB
|
|||||||
if (! $this->database_name)
|
if (! $this->database_name)
|
||||||
{
|
{
|
||||||
// Ordre SQL ne necessitant pas de connexion a une base (exemple: CREATE DATABASE)
|
// Ordre SQL ne necessitant pas de connexion a une base (exemple: CREATE DATABASE)
|
||||||
$ret = mysqli_query($this->db,$query);
|
$ret = $this->db->query($query);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$ret = mysqli_query($this->db,$query);
|
$ret = $this->db->query($query);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! preg_match("/^COMMIT/i",$query) && ! preg_match("/^ROLLBACK/i",$query))
|
if (! preg_match("/^COMMIT/i",$query) && ! preg_match("/^ROLLBACK/i",$query))
|
||||||
@@ -300,7 +290,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
{
|
{
|
||||||
// Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
|
// Si le resultset n'est pas fourni, on prend le dernier utilise sur cette connexion
|
||||||
if (! is_object($resultset)) { $resultset=$this->_results; }
|
if (! is_object($resultset)) { $resultset=$this->_results; }
|
||||||
return mysqli_fetch_object($resultset);
|
return $resultset->fetch_object();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -314,7 +304,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
{
|
{
|
||||||
// If resultset not provided, we take the last used by connexion
|
// If resultset not provided, we take the last used by connexion
|
||||||
if (! is_object($resultset)) { $resultset=$this->_results; }
|
if (! is_object($resultset)) { $resultset=$this->_results; }
|
||||||
return mysqli_fetch_array($resultset);
|
return $resultset->fetch_array();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -329,7 +319,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
if (! is_bool($resultset))
|
if (! is_bool($resultset))
|
||||||
{
|
{
|
||||||
if (! is_object($resultset)) { $resultset=$this->_results; }
|
if (! is_object($resultset)) { $resultset=$this->_results; }
|
||||||
return mysqli_fetch_row($resultset);
|
return $resultset->fetch_row();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -349,7 +339,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
{
|
{
|
||||||
// If resultset not provided, we take the last used by connexion
|
// If resultset not provided, we take the last used by connexion
|
||||||
if (! is_object($resultset)) { $resultset=$this->_results; }
|
if (! is_object($resultset)) { $resultset=$this->_results; }
|
||||||
return mysqli_num_rows($resultset);
|
return $resultset->num_rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -365,7 +355,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
if (! is_object($resultset)) { $resultset=$this->_results; }
|
if (! is_object($resultset)) { $resultset=$this->_results; }
|
||||||
// mysql necessite un link de base pour cette fonction contrairement
|
// mysql necessite un link de base pour cette fonction contrairement
|
||||||
// a pqsql qui prend un resultset
|
// a pqsql qui prend un resultset
|
||||||
return mysqli_affected_rows($this->db);
|
return $this->db->affected_rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -380,7 +370,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
// If resultset not provided, we take the last used by connexion
|
// If resultset not provided, we take the last used by connexion
|
||||||
if (! is_object($resultset)) { $resultset=$this->_results; }
|
if (! is_object($resultset)) { $resultset=$this->_results; }
|
||||||
// Si resultset en est un, on libere la memoire
|
// Si resultset en est un, on libere la memoire
|
||||||
if (is_object($resultset)) mysqli_free_result($resultset);
|
if (is_object($resultset)) $resultset->free_result();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -436,10 +426,10 @@ class DoliDBMysqli extends DoliDB
|
|||||||
1451 => 'DB_ERROR_CHILD_EXISTS'
|
1451 => 'DB_ERROR_CHILD_EXISTS'
|
||||||
);
|
);
|
||||||
|
|
||||||
if (isset($errorcode_map[mysqli_errno($this->db)])) {
|
if (isset($errorcode_map[$this->db->errno])) {
|
||||||
return $errorcode_map[mysqli_errno($this->db)];
|
return $errorcode_map[$this->db->errno];
|
||||||
}
|
}
|
||||||
$errno=mysqli_errno($this->db);
|
$errno=$this->db->errno;
|
||||||
return ($errno?'DB_ERROR_'.$errno:'0');
|
return ($errno?'DB_ERROR_'.$errno:'0');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -456,7 +446,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
return 'Not connected. Check setup parameters in conf/conf.php file and your mysql client and server versions';
|
return 'Not connected. Check setup parameters in conf/conf.php file and your mysql client and server versions';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return mysqli_error($this->db);
|
return $this->db->error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -469,7 +459,7 @@ class DoliDBMysqli extends DoliDB
|
|||||||
*/
|
*/
|
||||||
function last_insert_id($tab,$fieldid='rowid')
|
function last_insert_id($tab,$fieldid='rowid')
|
||||||
{
|
{
|
||||||
return mysqli_insert_id($this->db);
|
return $this->db->insert_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user