当前位置:Gxlcms > 数据库问题 > php 链接 sqlserver 2005以上版本数据库

php 链接 sqlserver 2005以上版本数据库

时间:2021-07-01 10:21:17 帮助过:3人阅读

/** * 数据库管理 * * @author wangaibo168@163.com * @charset utf-8 * 不支持sqlserver2005(包括)以下的版本 */ class Db { /** * @var 数据库连接配置 */ private static $DbLink; /** * @var 数据库连接配置 */ private static $DbConfig; /** * @var 需要执行的SQL语句 */ private static $SqlStr; /** * @var 最后错误信息 */ private static $ErrorMsg; /** * 默认构造函数 */ public function __construct(){ self::set(‘host‘,‘localhost‘); self::set(‘port‘,‘33333‘); self::set(‘username‘,‘lpinfoe‘); self::set(‘password‘,‘LOPALinfo8e‘); self::set(‘database‘,‘lopal2015e‘); self::set(‘charset‘,‘utf-8‘); } /** * 配置连接参数 * @param $opt */ public static function configure($opt){ if(!is_array($opt)) return; self::$DbConfig = $opt; } /** * 设置连接参数 * @param $key * @param $value */ public static function set($key,$value){ if(empty($key)) return; if(!is_array(self::$DbConfig)) self::$DbConfig = array(); self::$DbConfig[$key] = $value; } /** * 读取连接参数 * @param $key * @return null */ public static function get($key){ if(!is_array(self::$DbConfig) || empty($key) || !array_key_exists($key,self::$DbConfig)) return null; return self::$DbConfig[$key]; } /** * 数据库连接参数检查 * @return bool */ public static function check(){ $host = self::get(‘host‘); if(empty($host)) return false; $port = self::get(‘port‘); if(!is_numeric($port) || $port<0 || $port>65535) return false; $username = self::get(‘username‘); if(empty($username)) return false; $database = self::get(‘database‘); if(empty($database)) return false; $charset = self::get(‘charset‘); if(empty($charset)) return false; return true; } /** * 连接初始化 * @param bool $reconnect */ public static function connect($reconnect=false){ if(!$reconnect && is_resource(self::$DbLink)) return; self::close(); if(!self::check()) die(‘Database Configuration Error‘); $opt = array(‘Database‘=>self::get(‘database‘),‘CharacterSet‘=>self::get(‘charset‘),‘UID‘=>self::get(‘username‘),‘ReturnDatesAsStrings‘=>true,‘PWD‘=>self::get(‘password‘)); self::$DbLink = sqlsrv_connect(self::get(‘host‘).‘,‘.self::get(‘port‘),$opt); if(!is_resource(self::$DbLink)){ $err = sqlsrv_errors(); die(‘Database Connection Error(‘.$err[0][‘message‘].‘)‘); } // 测试连接是否可用 /* $stmt = sqlsrv_query(self::$DbLink,‘select 1 num‘); if(!is_resource($stmt)){ $err = sqlsrv_errors(); die(‘Database Query Error(‘.$err[0][‘message‘].‘)‘); } sqlsrv_free_stmt($stmt);*/ } /** * 查询SQL语句 * @param $sql * @param array $params * @return array|bool */ public static function executeQuery($sql,$params=array()){ self::$SqlStr = $sql; self::$ErrorMsg = ‘‘; if(empty($sql)) return false; self::connect(); if(!is_array($params)){ $params = array(); } $stmt = sqlsrv_query(self::$DbLink,self::$SqlStr,$params); if(!is_resource($stmt)){ $err = sqlsrv_errors(); self::$ErrorMsg = $err[0][‘message‘]; return false; } $arr = explode(‘;‘,$sql); if(count($arr)>1){ for($i=count($arr);$i>1;$i--){ sqlsrv_next_result($stmt); } } $rows = array(); while($row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC)){ $rows[] = $row; } sqlsrv_free_stmt($stmt); return $rows; } /** * 查询SQL语句 * @param $sql * @param array $params * @return bool|int */ public static function executeCount($sql,$params=array()){ self::$SqlStr = $sql; self::$ErrorMsg = ‘‘; if(empty($sql)) return false; self::connect(); if(!is_array($params)){ $params = array(); } $stmt = sqlsrv_query(self::$DbLink,self::$SqlStr,$params); if(!is_resource($stmt)){ $err = sqlsrv_errors(); self::$ErrorMsg = $err[0][‘message‘]; return false; } $row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_NUMERIC); $count = 0; if(is_array($row) && count($row)==1){ $count = intval($row[0]); } sqlsrv_free_stmt($stmt); return $count; } /** * 执行SQL语句 * @param $sql * @param array $params * @return bool|int */ public static function executeUpdate($sql,$params=array()){ self::connect(); self::$SqlStr = $sql; self::$ErrorMsg = ‘‘; if(empty($sql)) return false; self::connect(); if(!is_array($params)){ $params = array(); } $stmt = sqlsrv_query(self::$DbLink,self::$SqlStr,$params); if(!is_resource($stmt)){ $err = sqlsrv_errors(); self::$ErrorMsg = $err[0][‘message‘]; return false; } $num = sqlsrv_rows_affected($stmt); sqlsrv_free_stmt($stmt); return $num; } /** * 返回服务器信息 * @return array */ public static function serverInfo(){ self::connect(); return sqlsrv_server_info(self::$DbLink); } /** * 返回客户端信息 * @return array|null */ public static function clientInfo(){ self::connect(); return sqlsrv_client_info(self::$DbLink); } /** * 构建表SQL * @param $table * @return string */ private static function tableSql($table){ if(empty($table)) return ‘‘; if(is_array($table)){ $arr = array(); foreach($table as $k=>$v){ $arr[] = ‘[‘.$v.‘] ‘.$k; } $tableSql = implode(‘,‘,$arr); }else{ $tableSql = ‘[‘.$table.‘]‘; } return $tableSql; } /** * 构建字段SQL * @param $field * @return string */ private static function fieldSql($field){ if(empty($field)) return ‘*‘; if(is_array($field)){ $fieldSql = ‘[‘.implode(‘],[‘,$field).‘]‘; }else{ $fieldSql = $field; } return $fieldSql; } /** * 构建条件SQL * @param $where * @return string */ private static function whereSql($where){ if(empty($where)) return ‘‘; $whereSql = ‘ where ‘; if(is_array($where)){ $whereSql .= implode(‘ and ‘,$where); }else{ $whereSql .= $where; } return $whereSql; } /** * 构建排序SQL * @param $order * @return string */ private static function orderSql($order){ if(empty($order)) return ‘‘; $orderSql = ‘ order by ‘; if(is_array($order)){ $orderSql .= implode(‘,‘,$order); }else{ $orderSql .= $order; } return $orderSql; } /** * 统计数据量 * @param $table * @param $where * @param null $values * @return bool|int */ public static function count($table,$where,$values=null){ if(empty($table)) return false; $tableSql = self::tableSql($table); $whereSql = self::whereSql($where); self::$SqlStr = ‘select count(*) from ‘.$tableSql.$whereSql; return self::executeCount(self::$SqlStr,$values); } /** * 添加数据 * @param $table * @param $data * @return bool|int|string */ public static function add($table,$data){ if(empty($table) || !is_array($data) || count($data)==0) return false; self::connect(); $fields = array(); $values = array(); $places = array(); foreach($data as $key=>$value){ // 忽略以下划线开头的键 if(stripos($key,‘_‘)===0) continue; $fields[] = ‘[‘.$key.‘]‘; $values[] = $value; $places[] = ‘?‘; } self::$SqlStr = ‘insert into [‘.$table.‘](‘.implode(‘,‘,$fields).‘)values(‘.implode(‘,‘,$places).‘)‘; $num = self::executeUpdate(self::$SqlStr,$values); return $num>0; } /** * 插入数据并获取最后插入数据的ID(自增长数据) * @param $table * @param $data * @return bool|int|string */ public static function autoIdAdd($table,$data){ if(empty($table) || !is_array($data) || count($data)==0) return false; self::connect(); $fields = array(); $values = array(); $places = array(); foreach($data as $key=>$value){ // 忽略以下划线开头的键 if(stripos($key,‘_‘)===0) continue; $fields[] = ‘[‘.$key.‘]‘; $values[] = $value; $places[] = ‘?‘; } self::$SqlStr = ‘insert into [‘.$table.‘](‘.implode(‘,‘,$fields).‘)values(‘.implode(‘,‘,$places).‘);select top 1 SCOPE_IDENTITY() id‘; $rows = self::executeQuery(self::$SqlStr,$values); if(!is_array($rows) || count($rows)==0) return false; $id = $rows[0][‘id‘]; if(!is_numeric($id)) return false; return $id; } /** * 更新数据 * @param $table * @param $data * @param $where * @param null $value * @return bool */ public static function update($table,$data,$where,$value=null){ if(empty($table) || empty($where)) return false; self::connect(); $whereSql = self::whereSql($where); $values = array(); $places = array(); foreach($data as $key=>$v){ if(stripos($key,‘_‘)===0) continue; $values[] = $v; $places[] = ‘[‘.$key.‘]=?‘; } foreach($value as $v){ $values[] = $v; } self::$SqlStr = ‘update [‘.$table.‘] set ‘.implode(‘,‘,$places).$whereSql; $num = self::executeUpdate(self::$SqlStr,$values); return $num>0; } /** * 删除数据 * @param $table * @param $where * @param null $values * @return bool */ public static function delete($table,$where,$values=null){ if(empty($table) || empty($where)) return false; self::connect(); $tableSql = self::tableSql($table); $whereSql = self::whereSql($where); self::$SqlStr = ‘delete from ‘.$tableSql.$whereSql; $num = self::executeUpdate(self::$SqlStr,$values); return $num>0; } /** * 查询数据(全部) * @param $table * @param $field * @param $where * @param $order * @param null $values * @return array|bool */ public static function fetchAll($table,$field,$where,$order,$values=null){ if(empty($table)) return false; $tableSql = self::tableSql($table); $fieldSql = self::fieldSql($field); $whereSql = self::whereSql($where); $orderSql = self::orderSql($order); self::$SqlStr = ‘select ‘.$fieldSql.‘ from ‘.$tableSql.$whereSql.$orderSql; $rows = self::executeQuery(self::$SqlStr,$values); return $rows; } /** * 查询数据(分页) * @param $table * @param $page * @param $size * @param $field * @param $where * @param $order * @param null $values * @return array|bool */ public static function fetchPage($table,$page,$size,$field,$where,$order,$values=null){ if(empty($table)) return false; $tableSql = self::tableSql($table); $fieldSql = self::fieldSql($field); $whereSql = self::whereSql($where); $orderSql = self::orderSql($order); $size = intval($size); if($size<=0) $size = 10; $start = ($page-1)*$size; if($start<0) $start = 0; $end = $start+$size; self::$SqlStr = ‘select * from (select ROW_NUMBER()over(order by tempcolumn) temprownumber,* from (select top ‘.$end.‘ tempcolumn=0,‘.$fieldSql.‘ from ‘.$tableSql.$whereSql.$orderSql.‘) temptable1) temptable2 where temprownumber>‘.$start; $rows = self::executeQuery(self::$SqlStr,$values); return $rows; } /** * 查询数据(单条) * @param $table * @param $field * @param $where * @param $order * @param null $values * @return bool */ public static function fetchOne($table,$field,$where,$order,$values=null){ if(empty($table)) return false; $tableSql = self::tableSql($table); $fieldSql = self::fieldSql($field); $whereSql = self::whereSql($where); $orderSql = self::orderSql($order); self::$SqlStr = ‘select top 1 ‘.$fieldSql.‘ from ‘.$tableSql.$whereSql.$orderSql; $rows = self::executeQuery(self::$SqlStr,$values); if(!is_array($rows) || count($rows)!=1) return false; return $rows[0]; } /** * 获取单个字段数据 * @param $table * @param $name * @param string $def * @param null $where * @param null $order * @param null $values * @return string */ public static function fetchField($table,$name,$def=‘‘,$where=null,$order=null,$values=null){ if(empty($name)) return $def; $data = self::fetchOne($table,$name,$where,$order,$values); if(!is_array($data)) return $def; return $data[$name]; } /** * 获取最后插入的数据ID * @param $table * @return int|string */ public static function lastId($table){ $sql = ‘select top 1 IDENT_CURRENT(\‘[‘.$table.‘]\‘) id‘; $rows = self::executeQuery($sql); if(!is_array($rows) || count($rows)!=1) return -1; $id = $rows[0][‘id‘]; if(!is_numeric($id)) return -1; return $id; } /** * 获取最后执行的SQL语句 * @return mixed */ public static function lastSql(){ return self::$SqlStr; } /** * 获取错误 * @return mixed */ public static function lastError(){ return self::$ErrorMsg; } /** * 获取连接字串 * @return mixed */ public static function getDb(){ return self::$DbLink; } /** * 关闭连接 */ public static function close(){ if(is_resource(self::$DbLink)) sqlsrv_close(self::$DbLink); self::$DbLink = null; } } ?>

 

php 链接 sqlserver 2005以上版本数据库

标签:

人气教程排行