<?php
/**
* 数据库管理
*
* @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以上版本数据库的更多相关文章

  1. Ubuntu系统下配置PHP支持SQLServer 2005

    最近在做一个项目,该项目的数据库是微软公司的的SQLserver ,数据库安装在另一台windows服务器上,而项目却部署在ubuntu server上.那么这样就会涉及到项目在linux上如何链接S ...

  2. 关于在Java中链接SQLServer数据库中失败的原因分析

    首先声明:笔者是Java的初学者,并且一值是走在自学的道路上,长久以来只有“度娘”相伴.(加入了各种Java学习群,基本没有热心帮人解决问题的.可以理解-_-!!!)大神级的人物就不必看拙文了,没有什 ...

  3. ORACLE链接SQLSERVER数据库数据操作函数范例

    ORACLE链接SQLSERVER数据库数据操作函数范例 create or replace function FUN_NAME(LS_DJBH IN varchar2 ,LS_ITM varchar ...

  4. SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库)

    原文:SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库) 场景 公司最近的sharepoint的数据库服务器老是出问题,并且在一旦出现问题,就导致无法正 ...

  5. Sqlserver 2005 跨数据库 导入数据

    --Sqlserver 2005 跨数据库 导入数据:--SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/O ...

  6. 【升级至sql 2012】sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611。请将该数据库升级为最新版本。)

    sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611.请将该数据库升级为最新版本.) 最近工作中有一个sqlserver2005版本的mdf文件,还没有log文件 ...

  7. jtds链接SqlServer数据库(整合)

    先前使用的时候没做汇总,现在结合遇到的问题总结下. 开始使用jdbc驱动配置调用SqlServer不合适,根据网上的资料修改成了jtds配置方式. 当时使用的maven配置,配置如下: <spa ...

  8. 在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个。必须提供所有成员。 (microsoft.sqlserver.smo)

    问题:在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个.必须提供所有成员. (micro ...

  9. 使用vbScript 链接SQLserver数据库和基础操作

    使用vbs链接SQLserver数据库 数据库的创建.设计使用 management studio完成 1.本地链接数据库 set oCon = server.createObject("a ...

随机推荐

  1. Linux Tomcat 自启动

    使用chkconfig命令 修改tomcat/bin/startup.sh,在开头的地方添加如下内容 #chkconfig: #description:tomcat auto start #proce ...

  2. flex属性值----弹性盒子布局

    里面的属性都 是在有display: flex的情况 下才生效. 兼容性写法:   display: -webkit-box; /*老版本语法: Safari, iOS, Android browse ...

  3. linux学习心态建设

    为啥我们要学习Linux 技术的价值不在于这个技术有多么高超,而在于技术本身给我们带来什么价值,所以很多时候我们学习一个技术,不能盲目学,是为了使用这个技术,知道这个技术的使用场景,知道这个技术带来的 ...

  4. Leetcode - 458 Poor Pigs

    题目: 总共有1000个罐子,其中有且只有1个是毒药,另外其他的都是水. 现在用一群可怜的猪去找到那个毒药罐. 已知毒药让猪毒发的时间是15分钟, 那么在60分钟之内,最少需要几头猪来找出那个毒药罐? ...

  5. 关于手动关闭BootStrap模态框

    在网上找手动关闭BootStrap模态框的解决方法,说是(需要引用bootstrap.js等): $("#myModal").modal('hide'); 但是我发现我的只能关闭 ...

  6. js调用函数时传入的参数个数与函数定义时的参数个数不符时的操作

    在js中函数没有重载的概念,如果声明了多个重名的函数,不管函数的形参个数是否一样,只有最有一个有效,其他的函数声明都是无效的.比如说声明了两个函数fn(),第一次声明时没有形参,第二次声明时形参有两个 ...

  7. Java知识总结

                                                                                                         ...

  8. 第六十八节,htnl全局属性和其他属性

    htnl全局属性和其他属性 学习要点: 1.实体 2.元数据 3.全局属性 本章主要探讨HTML5中的HTML实体.以及HTML核心构成的元数据,最后了解一下HTML中的全局属性. 一.实体 HTML ...

  9. XML 用途

    XML 用途 XML 应用于 Web 开发的许多方面,常用于简化数据的存储和共享. XML 把数据从 HTML 分离 如果您需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编 ...

  10. git 恢复丢失的文件-- 不提交入口文件

    务必进入当前controller下面,才能恢复 git checkout HEAD TestController.class.php 01备份index.php文件 02使用 小乌龟的git 删除 t ...