mirror of
https://github.com/e107inc/e107.git
synced 2025-08-05 06:07:32 +02:00
PDO class optimization
This commit is contained in:
@@ -47,6 +47,17 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return a list of all registered time markers.
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function getTimeMarkers()
|
||||||
|
{
|
||||||
|
return $this->aTimeMarks;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function e107_db_debug()
|
function e107_db_debug()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@@ -1624,7 +1624,7 @@ class e107
|
|||||||
*
|
*
|
||||||
* @return e107_db_debug
|
* @return e107_db_debug
|
||||||
*/
|
*/
|
||||||
public static function getDebug() //XXX Discuss - possible with current setup?
|
public static function getDebug()
|
||||||
{
|
{
|
||||||
return self::getSingleton('e107_db_debug', true);
|
return self::getSingleton('e107_db_debug', true);
|
||||||
}
|
}
|
||||||
|
@@ -162,4 +162,10 @@
|
|||||||
$this->setErrorReporting($mode);
|
$this->setErrorReporting($mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public function db_Mark_Time($sMarker)
|
||||||
|
{
|
||||||
|
$this->markTime($sMarker);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@@ -33,7 +33,7 @@ class e_db_pdo implements e_db
|
|||||||
protected $mySQLlastErrText = ''; // Text of last error - now protected, use getLastErrorText()
|
protected $mySQLlastErrText = ''; // Text of last error - now protected, use getLastErrorText()
|
||||||
protected $mySQLlastQuery = '';
|
protected $mySQLlastQuery = '';
|
||||||
|
|
||||||
public $mySQLcurTable;
|
protected $mySQLcurTable;
|
||||||
public $mySQLlanguage;
|
public $mySQLlanguage;
|
||||||
public $mySQLinfo;
|
public $mySQLinfo;
|
||||||
public $tabset;
|
public $tabset;
|
||||||
@@ -51,8 +51,16 @@ class e_db_pdo implements e_db
|
|||||||
private $pdo = true; // using PDO or not.
|
private $pdo = true; // using PDO or not.
|
||||||
private $pdoBind = false;
|
private $pdoBind = false;
|
||||||
|
|
||||||
|
/** @var e107_traffic */
|
||||||
private $traffic;
|
private $traffic;
|
||||||
|
|
||||||
|
/** @var e107_db_debug */
|
||||||
|
private $dbg;
|
||||||
|
|
||||||
|
private $debugMode = false;
|
||||||
|
|
||||||
|
private $queryCount = 0;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor - gets language options from the cookie or session
|
* Constructor - gets language options from the cookie or session
|
||||||
@@ -60,17 +68,9 @@ class e_db_pdo implements e_db
|
|||||||
*/
|
*/
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
if((PHP_MAJOR_VERSION > 6) || !function_exists('mysql_connect') || (defined('e_PDO') && e_PDO === true))
|
|
||||||
{
|
|
||||||
$this->pdo = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
*/
|
|
||||||
$this->traffic = e107::getSingleton('e107_traffic');
|
$this->traffic = e107::getSingleton('e107_traffic');
|
||||||
|
|
||||||
$this->traffic->BumpWho('Create db object', 1);
|
$this->traffic->BumpWho('Create db object', 1);
|
||||||
|
|
||||||
$this->mySQLPrefix = MPREFIX; // Set the default prefix - may be overridden
|
$this->mySQLPrefix = MPREFIX; // Set the default prefix - may be overridden
|
||||||
|
|
||||||
if($port = e107::getMySQLConfig('port'))
|
if($port = e107::getMySQLConfig('port'))
|
||||||
@@ -78,9 +78,19 @@ class e_db_pdo implements e_db
|
|||||||
$this->mySQLport = intval($port);
|
$this->mySQLport = intval($port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Detect is already done in language handler, use it if not too early
|
// Detect is already done in language handler, use it if not too early
|
||||||
if(defined('e_LANGUAGE')) $this->mySQLlanguage = e107::getLanguage()->e_language;
|
if(defined('e_LANGUAGE'))
|
||||||
|
{
|
||||||
|
$this->mySQLlanguage = e107::getLanguage()->e_language;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (E107_DEBUG_LEVEL > 0)
|
||||||
|
{
|
||||||
|
$this->debugMode = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->dbg = e107::getDebug();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPDO()
|
function getPDO()
|
||||||
@@ -88,6 +98,11 @@ class e_db_pdo implements e_db
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function debugMode($bool)
|
||||||
|
{
|
||||||
|
$this->debugMode = (bool) $bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function getMode()
|
function getMode()
|
||||||
{
|
{
|
||||||
@@ -96,83 +111,6 @@ class e_db_pdo implements e_db
|
|||||||
return $row['@@sql_mode'];
|
return $row['@@sql_mode'];
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Connects to mySQL server and selects database - generally not required if your table is in the main DB.<br />
|
|
||||||
* <br />
|
|
||||||
* Example using e107 database with variables defined in e107_config.php:<br />
|
|
||||||
* <code>$sql = new db;
|
|
||||||
* $sql->db_Connect($mySQLserver, $mySQLuser, $mySQLpassword, $mySQLdefaultdb);</code>
|
|
||||||
* <br />
|
|
||||||
* OR to connect an other database:<br />
|
|
||||||
* <code>$sql = new db;
|
|
||||||
* $sql->db_Connect('url_server_database', 'user_database', 'password_database', 'name_of_database');</code>
|
|
||||||
*
|
|
||||||
* @param string $mySQLserver IP Or hostname of the MySQL server
|
|
||||||
* @param string $mySQLuser MySQL username
|
|
||||||
* @param string $mySQLpassword MySQL Password
|
|
||||||
* @param string $mySQLdefaultdb The database schema to connect to
|
|
||||||
* @param string $newLink force a new link connection if TRUE. Default FALSE
|
|
||||||
* @param string $mySQLPrefix Tables prefix. Default to $mySQLPrefix from e107_config.php
|
|
||||||
* @return null|string error code
|
|
||||||
*//*
|
|
||||||
public function db_Connect($mySQLserver, $mySQLuser, $mySQLpassword, $mySQLdefaultdb, $newLink = FALSE, $mySQLPrefix = MPREFIX)
|
|
||||||
{
|
|
||||||
global $db_ConnectionID, $db_defaultPrefix;
|
|
||||||
e107::getSingleton('e107_traffic')->BumpWho('db Connect', 1);
|
|
||||||
|
|
||||||
$this->mySQLserver = $mySQLserver;
|
|
||||||
$this->mySQLuser = $mySQLuser;
|
|
||||||
$this->mySQLpassword = $mySQLpassword;
|
|
||||||
$this->mySQLdefaultdb = $mySQLdefaultdb;
|
|
||||||
$this->mySQLPrefix = $mySQLPrefix;
|
|
||||||
$this->mySQLerror = false;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(strpos($mySQLserver,':')!==false && substr_count($mySQLserver, ':')===1)
|
|
||||||
{
|
|
||||||
list($this->mySQLserver,$this->mySQLport) = explode(':',$mySQLserver,2);
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
$this->mySQLaccess = new PDO("mysql:host=".$this->mySQLserver."; port=".$this->mySQLport, $this->mySQLuser, $this->mySQLpassword, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
|
|
||||||
}
|
|
||||||
catch(PDOException $ex)
|
|
||||||
{
|
|
||||||
$this->mySQLlastErrText = $ex->getMessage();
|
|
||||||
$this->mySQLlastErrNum = $ex->getCode();
|
|
||||||
return 'e1';
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->mySqlServerInfo = $this->mySQLaccess->query('select version()')->fetchColumn(); // We always need this for db_Set_Charset() - so make generally available
|
|
||||||
|
|
||||||
// Set utf8 connection?
|
|
||||||
//@TODO: simplify when yet undiscovered side-effects will be fixed
|
|
||||||
$this->setCharset();
|
|
||||||
$this->setSQLMode();
|
|
||||||
|
|
||||||
// if ($this->pdo!== true && !@mysql_select_db($this->mySQLdefaultdb, $this->mySQLaccess))
|
|
||||||
if (!$this->database($this->mySQLdefaultdb))
|
|
||||||
{
|
|
||||||
return 'e2';
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$this->dbError('dbConnect/SelectDB');
|
|
||||||
|
|
||||||
// Save the connection resource
|
|
||||||
if ($db_ConnectionID == null)
|
|
||||||
{
|
|
||||||
$db_ConnectionID = $this->mySQLaccess;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Connect ONLY - used in v2.x
|
* Connect ONLY - used in v2.x
|
||||||
@@ -186,7 +124,7 @@ class e_db_pdo implements e_db
|
|||||||
*/
|
*/
|
||||||
public function connect($mySQLserver, $mySQLuser, $mySQLpassword, $newLink = false)
|
public function connect($mySQLserver, $mySQLuser, $mySQLpassword, $newLink = false)
|
||||||
{
|
{
|
||||||
global $db_ConnectionID, $db_defaultPrefix;
|
global $db_ConnectionID;
|
||||||
|
|
||||||
$this->traffic->BumpWho('db Connect', 1);
|
$this->traffic->BumpWho('db Connect', 1);
|
||||||
|
|
||||||
@@ -214,7 +152,7 @@ class e_db_pdo implements e_db
|
|||||||
{
|
{
|
||||||
$this->mySQLlastErrText = $ex->getMessage();
|
$this->mySQLlastErrText = $ex->getMessage();
|
||||||
$this->mySQLLastErrNum = $ex->getCode();
|
$this->mySQLLastErrNum = $ex->getCode();
|
||||||
// e107::getDebug()->log($ex); // Useful for Debug. breaks testing.
|
$this->dbg->log($this->mySQLlastErrText); // Useful for Debug. breaks testing.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,14 +232,14 @@ class e_db_pdo implements e_db
|
|||||||
* @desc Enter description here...
|
* @desc Enter description here...
|
||||||
* @access private
|
* @access private
|
||||||
*/
|
*/
|
||||||
function db_Mark_Time($sMarker)
|
function markTime($sMarker)
|
||||||
{
|
{
|
||||||
if (E107_DEBUG_LEVEL > 0)
|
if($this->debugMode !== true)
|
||||||
{
|
{
|
||||||
/** @var e107_db_debug $db_debug */
|
return null;
|
||||||
global $db_debug;
|
|
||||||
$db_debug->Mark_Time($sMarker);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->dbg->Mark_Time($sMarker);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -347,7 +285,7 @@ class e_db_pdo implements e_db
|
|||||||
* @param string|array $query
|
* @param string|array $query
|
||||||
* @param string $query['PREPARE'] PDO Format query.
|
* @param string $query['PREPARE'] PDO Format query.
|
||||||
*@param array $query['BIND'] eg. array['my_field'] = array('value'=>'whatever', 'type'=>'str');
|
*@param array $query['BIND'] eg. array['my_field'] = array('value'=>'whatever', 'type'=>'str');
|
||||||
* @param unknown $rli
|
* @param object $rli
|
||||||
* @return boolean|PDOStatement | resource - as mysql_query() function.
|
* @return boolean|PDOStatement | resource - as mysql_query() function.
|
||||||
* FALSE indicates an error
|
* FALSE indicates an error
|
||||||
* For SELECT, SHOW, DESCRIBE, EXPLAIN and others returning a result set, returns a resource
|
* For SELECT, SHOW, DESCRIBE, EXPLAIN and others returning a result set, returns a resource
|
||||||
@@ -355,8 +293,8 @@ class e_db_pdo implements e_db
|
|||||||
*/
|
*/
|
||||||
public function db_Query($query, $rli = NULL, $qry_from = '', $debug = FALSE, $log_type = '', $log_remark = '')
|
public function db_Query($query, $rli = NULL, $qry_from = '', $debug = FALSE, $log_type = '', $log_remark = '')
|
||||||
{
|
{
|
||||||
global $db_time,$db_mySQLQueryCount,$queryinfo;
|
global $db_time, $queryinfo;
|
||||||
$db_mySQLQueryCount++;
|
$this->queryCount++;
|
||||||
|
|
||||||
$this->mySQLlastQuery = $query;
|
$this->mySQLlastQuery = $query;
|
||||||
|
|
||||||
@@ -439,7 +377,7 @@ class e_db_pdo implements e_db
|
|||||||
$this->mySQLresult = $sQryRes;
|
$this->mySQLresult = $sQryRes;
|
||||||
|
|
||||||
|
|
||||||
if (!E107_DEBUG_LEVEL)
|
if ($this->debugMode !== true)
|
||||||
{
|
{
|
||||||
$this->total_results = false;
|
$this->total_results = false;
|
||||||
}
|
}
|
||||||
@@ -455,18 +393,21 @@ class e_db_pdo implements e_db
|
|||||||
$this->total_results = intval($rc);
|
$this->total_results = intval($rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (E107_DEBUG_LEVEL)
|
if ($this->debugMode === true)
|
||||||
{
|
{
|
||||||
/** @var $db_debug e107_db_debug */
|
|
||||||
global $db_debug;
|
|
||||||
$aTrace = debug_backtrace();
|
$aTrace = debug_backtrace();
|
||||||
$pTable = $this->mySQLcurTable;
|
$pTable = $this->mySQLcurTable;
|
||||||
if (!strlen($pTable)) {
|
|
||||||
|
if(!strlen($pTable))
|
||||||
|
{
|
||||||
$pTable = '(complex query)';
|
$pTable = '(complex query)';
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
$this->mySQLcurTable = ''; // clear before next query
|
$this->mySQLcurTable = ''; // clear before next query
|
||||||
}
|
}
|
||||||
if(is_object($db_debug))
|
|
||||||
|
if(is_object($this->dbg))
|
||||||
{
|
{
|
||||||
$buglink = is_null($rli) ? $this->mySQLaccess : $rli;
|
$buglink = is_null($rli) ? $this->mySQLaccess : $rli;
|
||||||
|
|
||||||
@@ -485,14 +426,12 @@ class e_db_pdo implements e_db
|
|||||||
if($buglink instanceof PDO)
|
if($buglink instanceof PDO)
|
||||||
{
|
{
|
||||||
|
|
||||||
$db_debug->Mark_Query($query, 'PDO', $sQryRes, $aTrace, $mytime, $pTable);
|
$this->dbg->Mark_Query($query, 'PDO', $sQryRes, $aTrace, $mytime, $pTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
// echo "what happened to db_debug??!!<br />";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return $sQryRes;
|
return $sQryRes;
|
||||||
@@ -540,7 +479,7 @@ class e_db_pdo implements e_db
|
|||||||
* @param boolean $multi if true, fetch all (multi mode)
|
* @param boolean $multi if true, fetch all (multi mode)
|
||||||
* @param string $indexField field name to be used for indexing when in multi mode
|
* @param string $indexField field name to be used for indexing when in multi mode
|
||||||
* @param boolean $debug
|
* @param boolean $debug
|
||||||
* @return string|array
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public function retrieve($table, $fields = null, $where=null, $multi = false, $indexField = null, $debug = false)
|
public function retrieve($table, $fields = null, $where=null, $multi = false, $indexField = null, $debug = false)
|
||||||
{
|
{
|
||||||
@@ -639,6 +578,8 @@ class e_db_pdo implements e_db
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -657,7 +598,6 @@ class e_db_pdo implements e_db
|
|||||||
*/
|
*/
|
||||||
public function select($table, $fields = '*', $arg = '', $noWhere = false, $debug = FALSE, $log_type = '', $log_remark = '')
|
public function select($table, $fields = '*', $arg = '', $noWhere = false, $debug = FALSE, $log_type = '', $log_remark = '')
|
||||||
{
|
{
|
||||||
global $db_mySQLQueryCount;
|
|
||||||
|
|
||||||
$table = $this->hasLanguage($table);
|
$table = $this->hasLanguage($table);
|
||||||
|
|
||||||
@@ -1549,8 +1489,6 @@ class e_db_pdo implements e_db
|
|||||||
*/
|
*/
|
||||||
public function gen($query, $debug = FALSE, $log_type = '', $log_remark = '')
|
public function gen($query, $debug = FALSE, $log_type = '', $log_remark = '')
|
||||||
{
|
{
|
||||||
global $db_mySQLQueryCount;
|
|
||||||
|
|
||||||
$this->tabset = FALSE;
|
$this->tabset = FALSE;
|
||||||
|
|
||||||
$query .= " "; // temp fix for failing regex below, when there is no space after the table name;
|
$query .= " "; // temp fix for failing regex below, when there is no space after the table name;
|
||||||
@@ -1852,8 +1790,7 @@ class e_db_pdo implements e_db
|
|||||||
*/
|
*/
|
||||||
public function queryCount()
|
public function queryCount()
|
||||||
{
|
{
|
||||||
global $db_mySQLQueryCount;
|
return $this->queryCount;
|
||||||
return $db_mySQLQueryCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2307,6 +2244,7 @@ class e_db_pdo implements e_db
|
|||||||
return ($mode == 'lan') ? $lan : $nolan;
|
return ($mode == 'lan') ? $lan : $nolan;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return array();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -103,6 +103,9 @@ class e_db_mysql
|
|||||||
private $pdo = false; // using PDO or not.
|
private $pdo = false; // using PDO or not.
|
||||||
private $pdoBind= false;
|
private $pdoBind= false;
|
||||||
|
|
||||||
|
/** @var e107_db_debug */
|
||||||
|
protected $dbg = null;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor - gets language options from the cookie or session
|
* Constructor - gets language options from the cookie or session
|
||||||
@@ -141,6 +144,12 @@ class e_db_mysql
|
|||||||
}*/
|
}*/
|
||||||
// Detect is already done in language handler, use it if not too early
|
// Detect is already done in language handler, use it if not too early
|
||||||
if(defined('e_LANGUAGE')) $this->mySQLlanguage = e107::getLanguage()->e_language;
|
if(defined('e_LANGUAGE')) $this->mySQLlanguage = e107::getLanguage()->e_language;
|
||||||
|
|
||||||
|
if (E107_DEBUG_LEVEL > 0)
|
||||||
|
{
|
||||||
|
$this->dbg = e107::getDebug();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPDO()
|
function getPDO()
|
||||||
@@ -408,12 +417,13 @@ class e_db_mysql
|
|||||||
*/
|
*/
|
||||||
function db_Mark_Time($sMarker)
|
function db_Mark_Time($sMarker)
|
||||||
{
|
{
|
||||||
if (E107_DEBUG_LEVEL > 0)
|
if($this->dbg === null)
|
||||||
{
|
{
|
||||||
/** @var e107_db_debug $db_debug */
|
return null;
|
||||||
global $db_debug;
|
|
||||||
$db_debug->Mark_Time($sMarker);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->dbg->Mark_Time($sMarker);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -170,7 +170,7 @@ class e107_traffic
|
|||||||
$this->aTrafficWho[$sWhat][] = "$sFile($sLine)";
|
$this->aTrafficWho[$sWhat][] = "$sFile($sLine)";
|
||||||
}
|
}
|
||||||
|
|
||||||
function Calibrate($tObject, $count = 10)
|
function Calibrate(e107_traffic $tObject, $count = 10)
|
||||||
{
|
{
|
||||||
if (!defined("E107_DBG_TRAFFIC") || !E107_DBG_TRAFFIC)
|
if (!defined("E107_DBG_TRAFFIC") || !E107_DBG_TRAFFIC)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user