forked from typecho/typecho
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
169 additions
and
0 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,169 @@ | ||
<?php | ||
if (!defined('__TYPECHO_ROOT_DIR__')) exit; | ||
/** | ||
* Typecho Blog Platform | ||
* | ||
* @copyright Copyright (c) 2008 Typecho team (http://www.typecho.org) | ||
* @license GNU General Public License 2.0 | ||
* @version $Id: Mysql.php 103 2008-04-09 16:22:43Z magike.net $ | ||
*/ | ||
|
||
/** | ||
* 数据库Mysql适配器 | ||
* | ||
* @package Db | ||
*/ | ||
class Typecho_Db_Adapter_Mysqli implements Typecho_Db_Adapter | ||
{ | ||
/** | ||
* 数据库连接字符串标示 | ||
* | ||
* @access private | ||
* @var resource | ||
*/ | ||
private $_dbLink; | ||
|
||
/** | ||
* 判断适配器是否可用 | ||
* | ||
* @access public | ||
* @return boolean | ||
*/ | ||
public static function isAvailable() | ||
{ | ||
return function_exists('mysqli_connect'); | ||
} | ||
|
||
/** | ||
* 数据库连接函数 | ||
* | ||
* @param Typecho_Config $config 数据库配置 | ||
* @throws Typecho_Db_Exception | ||
* @return resource | ||
*/ | ||
public function connect(Typecho_Config $config) | ||
{ | ||
|
||
if ($this->_dbLink = @new MySQLi($config->host, $config->user, $config->password, $config->database, (empty($config->port) ? '' : $config->port))) { | ||
if ($config->charset) { | ||
$this->_dbLink->query("SET NAMES '{$config->charset}'"); | ||
} | ||
return $this->_dbLink; | ||
} | ||
|
||
/** 数据库异常 */ | ||
throw new Typecho_Db_Adapter_Exception(@$this->_dbLink->error); | ||
} | ||
|
||
/** | ||
* 执行数据库查询 | ||
* | ||
* @param string $query 数据库查询SQL字符串 | ||
* @param mixed $handle 连接对象 | ||
* @param integer $op 数据库读写状态 | ||
* @param string $action 数据库动作 | ||
* @throws Typecho_Db_Exception | ||
* @return resource | ||
*/ | ||
public function query($query, $handle, $op = Typecho_Db::READ, $action = NULL) | ||
{ | ||
if ($resource = @$this->_dbLink->query($query instanceof Typecho_Db_Query ? $query->__toString() : $query)) { | ||
return $resource; | ||
} | ||
|
||
/** 数据库异常 */ | ||
throw new Typecho_Db_Query_Exception($this->_dbLink->error, $this->_dbLink->errno); | ||
} | ||
|
||
/** | ||
* 将数据查询的其中一行作为数组取出,其中字段名对应数组键值 | ||
* | ||
* @param resource $resource 查询返回资源标识 | ||
* @return array | ||
*/ | ||
public function fetch($resource) | ||
{ | ||
return $resource->fetch_assoc(); | ||
} | ||
|
||
/** | ||
* 将数据查询的其中一行作为对象取出,其中字段名对应对象属性 | ||
* | ||
* @param resource $resource 查询的资源数据 | ||
* @return object | ||
*/ | ||
public function fetchObject($resource) | ||
{ | ||
return $resource->fetch_object(); | ||
} | ||
|
||
/** | ||
* 引号转义函数 | ||
* | ||
* @param string $string 需要转义的字符串 | ||
* @return string | ||
*/ | ||
public function quoteValue($string) | ||
{ | ||
return '\'' . str_replace(array('\'', '\\'), array('\'\'', '\\\\'), $string) . '\''; | ||
} | ||
|
||
/** | ||
* 对象引号过滤 | ||
* | ||
* @access public | ||
* @param string $string | ||
* @return string | ||
*/ | ||
public function quoteColumn($string) | ||
{ | ||
return '`' . $string . '`'; | ||
} | ||
|
||
/** | ||
* 合成查询语句 | ||
* | ||
* @access public | ||
* @param array $sql 查询对象词法数组 | ||
* @return string | ||
*/ | ||
public function parseSelect(array $sql) | ||
{ | ||
if (!empty($sql['join'])) { | ||
foreach ($sql['join'] as $val) { | ||
list($table, $condition, $op) = $val; | ||
$sql['table'] = "{$sql['table']} {$op} JOIN {$table} ON {$condition}"; | ||
} | ||
} | ||
|
||
$sql['limit'] = (0 == strlen($sql['limit'])) ? NULL : ' LIMIT ' . $sql['limit']; | ||
$sql['offset'] = (0 == strlen($sql['offset'])) ? NULL : ' OFFSET ' . $sql['offset']; | ||
|
||
return 'SELECT ' . $sql['fields'] . ' FROM ' . $sql['table'] . | ||
$sql['where'] . $sql['group'] . $sql['having'] . $sql['order'] . $sql['limit'] . $sql['offset']; | ||
} | ||
|
||
/** | ||
* 取出最后一次查询影响的行数 | ||
* | ||
* @param resource $resource 查询的资源数据 | ||
* @param mixed $handle 连接对象 | ||
* @return integer | ||
*/ | ||
public function affectedRows($resource, $handle) | ||
{ | ||
return $this->_dbLink->affected_rows; | ||
} | ||
|
||
/*y | ||
* 取出最后一次插入返回的主键值 | ||
* | ||
* @param resource $resource 查询的资源数据 | ||
* @param mixed $handle 连接对象 | ||
* @return integer | ||
*/ | ||
public function lastInsertId($resource, $handle) | ||
{ | ||
return $this->_dbLink->insert_id; | ||
} | ||
} |