| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 | 
							- <?php
 
- // +----------------------------------------------------------------------
 
- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
 
- // +----------------------------------------------------------------------
 
- // | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
 
- // +----------------------------------------------------------------------
 
- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
 
- // +----------------------------------------------------------------------
 
- // | Author: liu21st <liu21st@gmail.com>
 
- // +----------------------------------------------------------------------
 
- namespace Think\Db\Driver;
 
- use Think\Db\Driver;
 
- use PDO;
 
- /**
 
-  * Sqlsrv数据库驱动
 
-  */
 
- class Sqlsrv extends Driver{
 
-     protected $selectSql  =     'SELECT T1.* FROM (SELECT thinkphp.*, ROW_NUMBER() OVER (%ORDER%) AS ROW_NUMBER FROM (SELECT %DISTINCT% %FIELD% FROM %TABLE%%JOIN%%WHERE%%GROUP%%HAVING% %UNION%) AS thinkphp) AS T1 %LIMIT%%COMMENT%';
 
-     // PDO连接参数
 
-     protected $options = array(
 
-         PDO::ATTR_CASE              =>  PDO::CASE_LOWER,
 
-         PDO::ATTR_ERRMODE           =>  PDO::ERRMODE_EXCEPTION,
 
-         PDO::ATTR_STRINGIFY_FETCHES =>  false,
 
-         PDO::SQLSRV_ATTR_ENCODING   =>  PDO::SQLSRV_ENCODING_UTF8,
 
-     );
 
-     /**
 
-      * 解析pdo连接的dsn信息
 
-      * @access public
 
-      * @param array $config 连接信息
 
-      * @return string
 
-      */
 
-     protected function parseDsn($config){
 
-         $dsn  =   'sqlsrv:Database='.$config['database'].';Server='.$config['hostname'];
 
-         if(!empty($config['hostport'])) {
 
-             $dsn  .= ','.$config['hostport'];
 
-         }
 
-         return $dsn;
 
-     }
 
-     /**
 
-      * 取得数据表的字段信息
 
-      * @access public
 
-      * @return array
 
-      */
 
-     public function getFields($tableName) {
 
-         list($tableName) = explode(' ', $tableName);
 
-         $result =   $this->query("SELECT   column_name,   data_type,   column_default,   is_nullable
 
-         FROM    information_schema.tables AS t
 
-         JOIN    information_schema.columns AS c
 
-         ON  t.table_catalog = c.table_catalog
 
-         AND t.table_schema  = c.table_schema
 
-         AND t.table_name    = c.table_name
 
-         WHERE   t.table_name = '$tableName'");
 
-         $info   =   array();
 
-         if($result) {
 
-             foreach ($result as $key => $val) {
 
-                 $info[$val['column_name']] = array(
 
-                     'name'    => $val['column_name'],
 
-                     'type'    => $val['data_type'],
 
-                     'notnull' => (bool) ($val['is_nullable'] === ''), // not null is empty, null is yes
 
-                     'default' => $val['column_default'],
 
-                     'primary' => false,
 
-                     'autoinc' => false,
 
-                 );
 
-             }
 
-         }
 
-         return $info;
 
-     }
 
-     /**
 
-      * 取得数据表的字段信息
 
-      * @access public
 
-      * @return array
 
-      */
 
-     public function getTables($dbName='') {
 
-         $result   =  $this->query("SELECT TABLE_NAME
 
-             FROM INFORMATION_SCHEMA.TABLES
 
-             WHERE TABLE_TYPE = 'BASE TABLE'
 
-             ");
 
-         $info   =   array();
 
-         foreach ($result as $key => $val) {
 
-             $info[$key] = current($val);
 
-         }
 
-         return $info;
 
-     }
 
- 	/**
 
-      * order分析
 
-      * @access protected
 
-      * @param mixed $order
 
-      * @return string
 
-      */
 
-     protected function parseOrder($order) {
 
-         return !empty($order)?  ' ORDER BY '.$order:' ORDER BY rand()';
 
-     }
 
-     /**
 
-      * 字段名分析
 
-      * @access protected
 
-      * @param string $key
 
-      * @return string
 
-      */
 
-     protected function parseKey(&$key) {
 
-         $key   =  trim($key);
 
-         if(!is_numeric($key) && !preg_match('/[,\'\"\*\(\)\[.\s]/',$key)) {
 
-            $key = '['.$key.']';
 
-         }
 
-         return $key;   
 
-     }
 
-     /**
 
-      * limit
 
-      * @access public
 
-      * @param mixed $limit
 
-      * @return string
 
-      */
 
-     public function parseLimit($limit) {
 
-         if(empty($limit)) return '';
 
-         $limit	=	explode(',',$limit);
 
-         if(count($limit)>1)
 
-             $limitStr	=	'(T1.ROW_NUMBER BETWEEN '.$limit[0].' + 1 AND '.$limit[0].' + '.$limit[1].')';
 
-         else
 
-             $limitStr = '(T1.ROW_NUMBER BETWEEN 1 AND '.$limit[0].")";
 
-         return 'WHERE '.$limitStr;
 
-     }
 
-     /**
 
-      * 更新记录
 
-      * @access public
 
-      * @param mixed $data 数据
 
-      * @param array $options 表达式
 
-      * @return false | integer
 
-      */
 
-     public function update($data,$options) {
 
-         $this->model  =   $options['model'];
 
-         $this->parseBind(!empty($options['bind'])?$options['bind']:array());
 
-         $sql   = 'UPDATE '
 
-             .$this->parseTable($options['table'])
 
-             .$this->parseSet($data)
 
-             .$this->parseWhere(!empty($options['where'])?$options['where']:'')
 
-             .$this->parseLock(isset($options['lock'])?$options['lock']:false)
 
-             .$this->parseComment(!empty($options['comment'])?$options['comment']:'');
 
-         return $this->execute($sql,!empty($options['fetch_sql']) ? true : false);
 
-     }
 
-     /**
 
-      * 删除记录
 
-      * @access public
 
-      * @param array $options 表达式
 
-      * @return false | integer
 
-      */
 
-     public function delete($options=array()) {
 
-         $this->model  =   $options['model'];
 
-         $this->parseBind(!empty($options['bind'])?$options['bind']:array());
 
-         $sql   = 'DELETE FROM '
 
-             .$this->parseTable($options['table'])
 
-             .$this->parseWhere(!empty($options['where'])?$options['where']:'')
 
-             .$this->parseLock(isset($options['lock'])?$options['lock']:false)
 
-             .$this->parseComment(!empty($options['comment'])?$options['comment']:'');
 
-         return $this->execute($sql,!empty($options['fetch_sql']) ? true : false);
 
-     }
 
- }
 
 
  |