库 (class.QueryBuilder.php) /** * SQL Query Builder * * @author CRH380A-2722 609657831@qq.com */class QueryBuilder { /** * 查询语句碎片 * * @var array * @access private */ private $_querySnippets = array(); /** * 数据表前缀 * *
/** * SQL Query Builder * * @author CRH380A-2722 <609657831@qq.com> */ class QueryBuilder { /** * 查询语句碎片 * * @var array * @access private */ private $_querySnippets = array(); /** * 数据表前缀 * * @var string * @access private */ private $_prefix = DB_PREFIX; /** * 构造函数 * * @return void * @access public */ public function __construct() { $this->_querySnippets = array(); } /** * insert * * @param string $table 表名 * @return QueryBuilder * @access public */ public function insert($table) { $this->_querySnippets[] = 'INSERT INTO'; $this->_querySnippets[] = $this->_prefix . $table; return $this; } /** * values (要插入的数据) * * @param array $data 数据集合 * @return QueryBuilder * @access public */ public function values(array $data) { $field = array(); $value = array(); foreach ($data as $f => $v) { $field[] = $f; $value[] = $v; } $this->_querySnippets[] = '(' . implode(',', $field) . ')'; $this->_querySnippets[] = 'VALUES'; $this->_querySnippets[] = '(' . implode(',', $value) . ')'; return $this; } /** * select * * @param string $fields 字段名称 * @return QueryBuilder * @access public */ public function select($fields = '*') { $this->_querySnippets[] = 'SELECT'; $this->_querySnippets[] = $fields; return $this; } /** * select distinct * * @param string $fields 字段名称 * @return QueryBuilder * @access public */ public function distinctSelect($fields = '*') { $this->_querySnippets[] = 'SELECT DISTINCT'; $this->_querySnippets[] = $fields; return $this; } /** * from * * @param string $table 表名 * @return QueryBuilder * @access public */ public function from($table) { $this->_querySnippets[] = 'FROM'; $this->_querySnippets[] = $this->_prefix . $table; return $this; } /** * where * * @param string $condition 选择的条件 * @return QueryBuilder * @access public */ public function where($condition) { $this->_querySnippets[] = 'WHERE'; $this->_querySnippets[] = $condition; return $this; } /** * and * * @param string $condition 选择的条件 * @return QueryBuilder * @access public */ public function andWhere($condition) { $this->_querySnippets[] = 'AND'; $this->_querySnippets[] = $condition; return $this; } /** * or * * @param string $condition 选择的条件 * @return QueryBuilder * @access public */ public function orWhere($condition) { $this->_querySnippets[] = 'OR'; $this->_querySnippets[] = $condition; return $this; } /** * as * * @param string $alias 表别名 * @return QueryBuilder * @access public */ public function asAlias($alias) { $this->_querySnippets[] = 'AS'; $this->_querySnippets[] = $alias; return $this; } /** * join * * @param string $type 联结类型 * @param string $table 表名 * @return QueryBuilder * @access public */ public function join($type, $table) { switch ($type) { case 'inner': $this->_querySnippets[] = 'INNER JOIN'; break; case 'left': $this->_querySnippets[] = 'LEFT JOIN'; break; case 'right': $this->_querySnippets[] = 'RIGHT JOIN'; break; default: break; } $this->_querySnippets[] = $this->_prefix . $table; return $this; } /** * on * * @param string $condition 连接的条件 * @return QueryBuilder * @access public */ public function on($condition) { $this->_querySnippets[] = 'ON'; $this->_querySnippets[] = $condition; return $this; } /** * using * * @param string $field 字段名称 * @return QueryBuilder * @access public */ public function using($field) { $this->_querySnippets[] = 'USING(' . $field . ')'; return $this; } /** * limit * * @param int $limit 限制的条目数 * @param int $offset 决定从哪条结果开始 * @return QueryBuilder * @access public */ public function limit($limit, $offset = NULL) { $this->_querySnippets[] = 'LIMIT'; if ($offset != NULL) { $this->_querySnippets[] = $offset . ',' . $limit; } else { $this->_querySnippets[] = $limit; } return $this; } /** * order by * * @param string $field 字段名 * @param string $type 排序类型 (ASC || DESC) * @return QueryBuilder * @access public */ public function orderBy($field, $type) { $this->_querySnippets[] = 'ORDER BY'; $this->_querySnippets[] = $field; $this->_querySnippets[] = $type; return $this; } /** * group by * * @param string $field 字段名 * @return QueryBuilder * @access public */ public function groupBy($field) { $this->_querySnippets[] = 'GROUP BY'; $this->_querySnippets[] = $field; return $this; } /** * update * * @param string $table 表名 * @return QueryBuilder * @access public */ public function update($table) { $this->_querySnippets[] = 'UPDATE'; $this->_querySnippets[] = $this->_prefix . $table; return $this; } /** * set * * @param string $values 重新设定的值 * @return QueryBuilder * @access public */ public function set($values) { $this->_querySnippets[] = 'SET'; $this->_querySnippets[] = $values; return $this; } /** * delete * * @param string $table 表名 * @return QueryBuilder * @access public */ public function delete($table) { $this->_querySnippets[] = 'DELETE FROM'; $this->_querySnippets[] = $this->_prefix . $table; return $this; } /** * 构建查询语句 * * @return string * @access public */ public function build() { return implode(' ', $this->_querySnippets) . ';'; } /** * @return string * @access public */ public function __toString() { return $this->build(); } }测试文件 (test.php)
select('s.*, p.*') ->from('test') ->asAlias('s') ->join('left', 'projects') ->asAlias('p') ->using('shareId') ->where('userId = id') ->andWhere('userName = \'test\'') ->orderBy('userRegDate', 'DESC') ->limit(1, 20) . ''; print $query2->insert('table') ->values(array( 'id' => "0", 'test' => "'test text'", 'date' => "NOW()" )) . ''; print $query3->update('table') ->set("`id` = 2333, `text` = 'test'") ->where('uid = 1') ->limit(1) . ''; print $query4->delete('table') ->where('uid = 1') ->limit(1) . ''; print $query5->distinctSelect('company') ->from('table') . ''; print $query6->select('SUM(price)') ->from('orders') ->groupBy('user');