php 链接 sqlserver 2005以上版本数据库
<?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以上版本数据库的更多相关文章
- Ubuntu系统下配置PHP支持SQLServer 2005
最近在做一个项目,该项目的数据库是微软公司的的SQLserver ,数据库安装在另一台windows服务器上,而项目却部署在ubuntu server上.那么这样就会涉及到项目在linux上如何链接S ...
- 关于在Java中链接SQLServer数据库中失败的原因分析
首先声明:笔者是Java的初学者,并且一值是走在自学的道路上,长久以来只有“度娘”相伴.(加入了各种Java学习群,基本没有热心帮人解决问题的.可以理解-_-!!!)大神级的人物就不必看拙文了,没有什 ...
- ORACLE链接SQLSERVER数据库数据操作函数范例
ORACLE链接SQLSERVER数据库数据操作函数范例 create or replace function FUN_NAME(LS_DJBH IN varchar2 ,LS_ITM varchar ...
- SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库)
原文:SQLServer 2005 数据库定阅复制实现双机热备(主要是sharepoint 内容数据库) 场景 公司最近的sharepoint的数据库服务器老是出问题,并且在一旦出现问题,就导致无法正 ...
- Sqlserver 2005 跨数据库 导入数据
--Sqlserver 2005 跨数据库 导入数据:--SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/O ...
- 【升级至sql 2012】sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611。请将该数据库升级为最新版本。)
sqlserver mdf向上兼容附加数据库(无法打开数据库 'xxxxx' 版本 611.请将该数据库升级为最新版本.) 最近工作中有一个sqlserver2005版本的mdf文件,还没有log文件 ...
- jtds链接SqlServer数据库(整合)
先前使用的时候没做汇总,现在结合遇到的问题总结下. 开始使用jdbc驱动配置调用SqlServer不合适,根据网上的资料修改成了jtds配置方式. 当时使用的maven配置,配置如下: <spa ...
- 在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个。必须提供所有成员。 (microsoft.sqlserver.smo)
问题:在SQL SERVER 2005中还原数据库时出现错误:system.data.sqlclient.sqlerror 媒体集有 2 个媒体簇 但只提供了 1 个.必须提供所有成员. (micro ...
- 使用vbScript 链接SQLserver数据库和基础操作
使用vbs链接SQLserver数据库 数据库的创建.设计使用 management studio完成 1.本地链接数据库 set oCon = server.createObject("a ...
随机推荐
- Opencv+MFC获取摄像头数据,显示在Picture控件
分为两步:OpenCV获取摄像头数据+图像在Picture上显示 第一步:OpenCV获取摄像头数据 参考:http://www.cnblogs.com/epirus/archive/2012/06/ ...
- 在Linux下访问Windows共享目录的配置方法
在Linux下访问Windows共享目录的配置方法 1.在Windows上设置一个共享目录 如:将d:\RedHat_disk设置为共享目录 2.在Windows上创建一个用户,如tommy,密码11 ...
- 使用SyncToy 同步两台机器上的文件夹
@echo off echo 准备启动同步... net use \\WIN-AJH8QENQQGK "123456" /user:Administrator Z:\SyncToy ...
- 学习笔记(C++Primer)--易错点总结(Chapter2)
2.1.2Type Conversions(1/10/2017) 1.If we assign an out-of-range value to an object of unsigned type, ...
- 配置 Apache 的虚拟主机
1.在host配置比如: 找到记事本以管理员的身份打开,然后文件->打开 C:\Windows\System32\drivers\etc 下面的hosts文件 127.0.0.1 www ...
- 整合改造百度编译器到thinkphp上传图片到OSS
oss上传类库,放到public下,放到extend下,实例化是报错找不到上传类(我不知道为什么).
- html中 iframe子页面 与父页面之间的方法调用 ;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- fzu Problem 2128 最长子串(KMP + strstr 经典好题)
Problem Description 问题很简单,给你一个字符串s,问s的子串中不包含s1,s2...sn的最长串有多长. Input 输入包含多组数据.第一行为字符串s,字符串s的长度1到10 ...
- 转:详解JMeter正则表达式(1)
1.概览 JMeter中包含范本匹配软件Apache Jakarta ORO .在Jakarta网站上有一些关于它的文档,例如a summary of the pattern matching cha ...
- CodeForces 696C PLEASE
快速幂,费马小定理,逆元. 设$dp[n]$表示$n$次操作之后的概率,那么$dp[n] = \frac{{(1 - dp[n - 1])}}{2}$.$1-dp[n - 1]$表示上一次没有在中间的 ...