-
-
Save Onasusweb/e3bba7d547bd7029d589 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| class MySQL extends Db { | |
| public $logRoute; | |
| private $_cache_list; | |
| private $_tables; | |
| private $_enableFileCache = false; | |
| private $_not_cached = array( | |
| "cart" | |
| ); | |
| private function _addToCache($q, $r) { | |
| preg_match("/\/(.+?)\.php/", $_SERVER["REQUEST_URI"], $fname); | |
| if (in_array($fname[1], $this->_not_cached) && in_array($_SERVER["REQUEST_URI"], $this->_not_cached)) { | |
| $this->_cache_list[md5($q) ] = $r; | |
| if ($this->_enableFileCache) { | |
| file_put_contents(_PS_MYSQLCAHE_DIR_ . md5($_SERVER["REQUEST_URI"]) , serialize($this->_cache_list) , LOCK_EX); | |
| } | |
| } | |
| } | |
| private function _getCache() { | |
| $filename = md5($_SERVER["REQUEST_URI"]); | |
| if ($this->_enableFileCache && file_exists(_PS_MYSQLCAHE_DIR_ . $filename) && (filemtime(_PS_MYSQLCAHE_DIR_ . $filename) + 1800) > time()) | |
| return unserialize(file_get_contents(_PS_MYSQLCAHE_DIR_ . $filename)); | |
| else | |
| return array(); | |
| } | |
| private function _getFromCache($q) { | |
| if (isset($this->_cache_list[md5($q)])) | |
| return $this->_cache_list[md5($q)]; | |
| return false; | |
| } | |
| private function _isInCache($q) { | |
| return (isset($this->_cache_list[md5($q)])); | |
| } | |
| public function connect() { | |
| if (!defined("_PS_DEBUG_SQL_")) | |
| define("_PS_DEBUG_SQL_", false); | |
| if ($this->_link = @mysql_connect($this->_server, $this->_user, $this->_password)) { | |
| if (!$this->set_db($this->_database)) | |
| die(Tools::displayError("The database selection cannot be made.")); | |
| } | |
| else | |
| die(Tools::displayError("Link to database cannot be established.")); | |
| /* UTF-8 support */ | |
| if (!mysql_query("SET NAMES \"utf8\"", $this->_link)) | |
| die(Tools::displayError("PrestaShop Fatal error: no utf-8 support. Please check your server configuration.")); | |
| /* Disable some MySQL limitations */ | |
| mysql_query("SET GLOBAL SQL_MODE=\"\"", $this->_link); | |
| //##### | |
| // Get cache $this->_cache_list = $this->_getCache(); | |
| //##### | |
| return $this->_link; | |
| } | |
| /* do not remove, useful for some modules */ | |
| public function set_db($db_name) { | |
| return mysql_select_db($db_name, $this->_link); | |
| } | |
| public function disconnect() { | |
| if ($this->_link) @mysql_close($this->_link); | |
| $this->_link = false; | |
| } | |
| public function getRow($query) { | |
| if ($this->_isInCache($query) && (strtoupper(substr(trim($query) , 0, 6)) == "SELECT")) | |
| return $this->_getFromCache($query); | |
| $this->logRoute[] = $query; | |
| $this->_result = false; | |
| if ($this->_link) | |
| if ($this->_result = mysql_query($query . " LIMIT 1", $this->_link)) { | |
| if (_PS_DEBUG_SQL_) | |
| $this->displayMySQLError($query); | |
| $result = mysql_fetch_assoc($this->_result); | |
| $this->_addToCache($query, $result); | |
| return $result; | |
| } | |
| if (_PS_DEBUG_SQL_) $this->displayMySQLError($query); | |
| return false; | |
| } | |
| public function getValue($query) { | |
| if ($this->_isInCache($query) && strtoupper(substr(trim($query) , 0, 6)) == "SELECT") | |
| return $this->_getFromCache($query); | |
| $this->logRoute[] = $query; | |
| $this->_result = false; | |
| if ($this->_link AND $this->_result = mysql_query($query . " LIMIT 1", $this->_link) AND is_array($tmpArray = mysql_fetch_assoc($this->_result))) | |
| $result = array_shift($tmpArray); | |
| $this->_addToCache($query, $result); | |
| return $result; | |
| return false; | |
| } | |
| public function Execute($query) { | |
| if ($this->_isInCache($query) && strtoupper(substr(trim($query) , 0, 6)) == "SELECT") | |
| return $this->_getFromCache($query); | |
| $this->logRoute[] = $query; | |
| $this->_result = false; | |
| if ($this->_link) { | |
| $this->_result = mysql_query($query, $this->_link); | |
| if (_PS_DEBUG_SQL_) $this->displayMySQLError($query); | |
| $this->_addToCache($query, $this->_result); | |
| return $this->_result; | |
| } | |
| if (_PS_DEBUG_SQL_) $this->displayMySQLError($query); | |
| return false; | |
| } | |
| public function ExecuteS($query, $array = true) { | |
| if ($this->_isInCache($query) && strtoupper(substr(trim($query) , 0, 6)) == "SELECT") return $this->_getFromCache($query); | |
| $this->logRoute[] = $query; | |
| $this->_result = false; | |
| if ($this->_link && | |
| $this->_result = mysql_query($query, $this->_link)) { | |
| if (_PS_DEBUG_SQL_) $this->displayMySQLError($query); | |
| if (!$array) { | |
| $this->_addToCache($query, $this->_result); | |
| return $this->_result; | |
| } | |
| $resultArray = array(); | |
| while ($row = mysql_fetch_assoc($this->_result)) $resultArray[] = $row; | |
| $this->_addToCache($query, $resultArray); | |
| return $resultArray; | |
| } | |
| if (_PS_DEBUG_SQL_) $this->displayMySQLError($query); | |
| return false; | |
| } | |
| public function nextRow($result = false) { | |
| return mysql_fetch_assoc($result ? $result : $this->_result); | |
| } | |
| public function delete($table, $where = false, $limit = false) { | |
| $this->_result = false; | |
| if ($this->_link) return mysql_query("DELETE FROM `" . pSQL($table) . "`" . ($where ? " WHERE " . $where : "") . ($limit ? " LIMIT " . intval($limit) : "") , $this->_link); | |
| return false; | |
| } | |
| public function NumRows() { | |
| if ($this->_link AND $this->_result) | |
| return mysql_num_rows($this->_result); | |
| } | |
| public function Insert_ID() { | |
| if ($this->_link) return mysql_insert_id($this->_link); | |
| return false; | |
| } | |
| public function Affected_Rows() { | |
| if ($this->_link) return mysql_affected_rows($this->_link); | |
| return false; | |
| } | |
| protected function q($query) { | |
| $this->logRoute[] = $query; | |
| $this->_result = false; | |
| if ($this->_link) return mysql_query($query, $this->_link); | |
| return false; | |
| } | |
| /** * Returns the text of the error message from previous MySQL operation * | |
| * @acces public | |
| * @return string error | |
| */ | |
| public function getMsgError($query = false) { | |
| return mysql_error(); | |
| } | |
| public function getNumberError() { | |
| return mysql_errno(); | |
| } | |
| public function displayMySQLError($query = false) { | |
| if (_PS_DEBUG_SQL_ AND mysql_errno()) { | |
| if ($query) | |
| die(Tools::displayError(mysql_error() . " " . $query . "")); | |
| die(Tools::displayError((mysql_error()))); | |
| } | |
| } | |
| static public function tryToConnect($server, $user, $pwd, $db) { | |
| if (!$link = @mysql_connect($server, $user, $pwd)) | |
| return 1; | |
| if (!@mysql_select_db($db, $link)) | |
| return 2; | |
| @mysql_close($link); | |
| return 0; | |
| } | |
| static public function tryUTF8($server, $user, $pwd) { | |
| $link = @mysql_connect($server, $user, $pwd); | |
| if (!mysql_query("SETNAMES utf8", $link)) | |
| $ret = false; | |
| else | |
| $ret = true; | |
| @mysql_close($link); | |
| return $ret; | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment