mirror of
https://github.com/Sarjuuk/aowow.git
synced 2025-11-29 15:58:16 +08:00
- do not display serverside events in calendar - include gems in item comparison .. also parse their stats in setup - filters use conditions and are more restrictive - changed DBSimple version so it uses mysqli (mysql is deprecated as of php 5.5) - moved each filter class to matching type; file for baseType and BaseFilter - baseType querys are somewhat modular, trying to avoid ridiculous joins that WILL occur sometimes (especially with items) as far as possible
183 lines
4.1 KiB
PHP
183 lines
4.1 KiB
PHP
<?php
|
|
/**
|
|
* DbSimple_Mysqli: MySQLi database.
|
|
* (C) Dk Lab, http://en.dklab.ru
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
* See http://www.gnu.org/copyleft/lesser.html
|
|
*
|
|
* Placeholders are emulated because of logging purposes.
|
|
*
|
|
* @author Andrey Stavitsky
|
|
*
|
|
* @version 2.x $Id$
|
|
*/
|
|
require_once dirname(__FILE__).'/Database.php';
|
|
|
|
/**
|
|
* Database class for MySQL.
|
|
*/
|
|
class DbSimple_Mysqli extends DbSimple_Database
|
|
{
|
|
private $link;
|
|
private $isMySQLnd;
|
|
|
|
public function DbSimple_Mysqli($dsn)
|
|
{
|
|
$base = preg_replace('{^/}s', '', $dsn['path']);
|
|
if (!class_exists('mysqli'))
|
|
return $this->_setLastError('-1', 'mysqli extension is not loaded', 'mysqli');
|
|
|
|
try
|
|
{
|
|
$this->link = mysqli_init();
|
|
|
|
$this->link->options(MYSQLI_OPT_CONNECT_TIMEOUT,
|
|
isset($dsn['timeout']) && $dsn['timeout'] ? $dsn['timeout'] : 0);
|
|
|
|
$this->link->real_connect((isset($dsn['persist']) && $dsn['persist'])?'p:'.$dsn['host']:$dsn['host'],
|
|
$dsn['user'], isset($dsn['pass'])?$dsn['pass']:'', $base,
|
|
empty($dsn['port'])?NULL:$dsn['port'], NULL,
|
|
(isset($dsn['compression']) && $dsn['compression'])
|
|
? MYSQLI_CLIENT_COMPRESS : NULL);
|
|
|
|
$this->link->set_charset((isset($dsn['enc']) ? $dsn['enc'] : 'UTF8'));
|
|
|
|
$this->isMySQLnd = method_exists('mysqli_result', 'fetch_all');
|
|
}
|
|
catch (mysqli_sql_exception $e)
|
|
{
|
|
$this->_setLastError($e->getCode() , $e->getMessage(), 'new mysqli');
|
|
}
|
|
}
|
|
|
|
protected function _performGetPlaceholderIgnoreRe()
|
|
{
|
|
return '
|
|
" (?> [^"\\\\]+|\\\\"|\\\\)* " |
|
|
\' (?> [^\'\\\\]+|\\\\\'|\\\\)* \' |
|
|
` (?> [^`]+ | ``)* ` | # backticks
|
|
/\* .*? \*/ # comments
|
|
';
|
|
}
|
|
|
|
protected function _performEscape($s, $isIdent=false)
|
|
{
|
|
if (!$isIdent)
|
|
{
|
|
return "'" .$this->link->escape_string($s). "'";
|
|
}
|
|
else
|
|
{
|
|
return "`" . str_replace('`', '``', $s) . "`";
|
|
}
|
|
}
|
|
|
|
protected function _performTransaction($parameters=null)
|
|
{
|
|
return $this->link->query('BEGIN');
|
|
}
|
|
|
|
protected function _performCommit()
|
|
{
|
|
return $this->link->query('COMMIT');
|
|
}
|
|
|
|
protected function _performRollback()
|
|
{
|
|
return $this->link->query('ROLLBACK');
|
|
}
|
|
|
|
protected function _performQuery($queryMain)
|
|
{
|
|
$this->_lastQuery = $queryMain;
|
|
|
|
$this->_expandPlaceholders($queryMain, false);
|
|
|
|
$result = $this->link->query($queryMain[0]);
|
|
|
|
if (!$result)
|
|
return $this->_setDbError($this->link, $queryMain[0]);
|
|
|
|
if ($this->link->errno!=0)
|
|
return $this->_setDbError($this->link, $queryMain[0]);
|
|
|
|
if (preg_match('/^\s* INSERT \s+/six', $queryMain[0]))
|
|
return $this->link->insert_id;
|
|
|
|
if ($this->link->field_count == 0)
|
|
return $this->link->affected_rows;
|
|
|
|
if ($this->isMySQLnd)
|
|
{
|
|
$res = $result->fetch_all(MYSQLI_ASSOC);
|
|
$result->close();
|
|
}
|
|
else
|
|
{
|
|
$res = $result;
|
|
}
|
|
|
|
return $res;
|
|
}
|
|
|
|
protected function _performTransformQuery(&$queryMain, $how)
|
|
{
|
|
// If we also need to calculate total number of found rows...
|
|
switch ($how)
|
|
{
|
|
// Prepare total calculation (if possible)
|
|
case 'CALC_TOTAL':
|
|
$m = null;
|
|
if (preg_match('/^(\s* SELECT)(.*)/six', $queryMain[0], $m))
|
|
$queryMain[0] = $m[1] . ' SQL_CALC_FOUND_ROWS' . $m[2];
|
|
return true;
|
|
|
|
// Perform total calculation.
|
|
case 'GET_TOTAL':
|
|
// Built-in calculation available?
|
|
$queryMain = array('SELECT FOUND_ROWS()');
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
protected function _setDbError($obj,$q)
|
|
{
|
|
$info=$obj?$obj:$this->link;
|
|
return $this->_setLastError($info->errno, $info->error, $q);
|
|
}
|
|
|
|
protected function _performNewBlob($id=null)
|
|
{
|
|
}
|
|
|
|
protected function _performGetBlobFieldNames($result)
|
|
{
|
|
return array();
|
|
}
|
|
|
|
protected function _performFetch($result)
|
|
{
|
|
if ($this->isMySQLnd)
|
|
return $result;
|
|
|
|
$row = $result->fetch_assoc();
|
|
|
|
if ($this->link->error)
|
|
return $this->_setDbError($this->_lastQuery);
|
|
|
|
if ($row === false)
|
|
{
|
|
$result->close();
|
|
return null;
|
|
}
|
|
|
|
return $row;
|
|
}
|
|
}
|
|
|
|
?>
|