php不能连接ms sql server2008的问题 我装的是wamp集成开发环境和sql server 2008,当使用pdo连接该数据库的时候总是超时,而用mssql_connect函数连接的时候显示没有该数据库,在网上查了一下,说需要微软提供的php扩展来连接sql server 2008,求详解 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 php 5.3以后的版本是不能用mssql了,得去微软网站下载php扩展sqlsrv加载。还付一chm手册。这个是speedphp fk自己新增的一个类,参考参考吧<?php/////////////////////////////////////////////////////////////////// SpeedPHP中文PHP框架, Copyright (C) 2008 - 2010 SpeedPHP.com ////////////////////////////////////////////////////////////////////** * db_mssql MsSQL数据库的驱动支持 */class db_sqlsrv { /** * 数据库链接句柄 */ public $conn; /** * 执行的SQL语句记录 */ public $arrSql; /** * 按SQL语句获取记录结果,返回数组 * * @param sql 执行的SQL语句 */ public function getArray($sql) { if( ! $result = $this->exec($sql) )return array(); //if( ! sqlsrv_num_rows($result) )return array(); $rows = array(); while($rows[] = sqlsrv_fetch_array($result,SQLSRV_FETCH_ASSOC)){} sqlsrv_free_stmt($result); array_pop($rows); return $rows; } /** * 返回当前插入记录的主键ID */ public function newinsertid() { $result = $this->getArray("select @@IDENTITY as sptmp_newinsert_id"); return $result[0]['sptmp_newinsert_id']; } /** * 格式化带limit的SQL语句 */ public function setlimit($sql, $limit) { if(!eregi(",", $limit))$limit = '0,'.$limit; $sql .= " LIMIT {$limit}"; return $this->translimit($sql); } /** * 执行一个SQL语句 * * @param sql 需要执行的SQL语句 */ public function exec($sql) { $this->arrSql[] = $sql; if( $result = sqlsrv_query($this->conn, $sql) ){ return $result; }else{ if( ($errors = sqlsrv_errors() ) != null) { $msg = ''; foreach( $errors as $error) { $msg .= "message: ".$error[ 'message']."\n"; } spError("{$sql}<br />执行错误: " . $msg); } } } /** * 返回影响行数 */ public function affected_rows() { return sqlsrv_rows_affected($this->conn); } /** * 获取数据表结构 * * @param tbl_name 表名称 */ public function getTable($tbl_name) { $result = $this->getArray("SELECT syscolumns.name FROM syscolumns, systypes WHERE syscolumns.xusertype = systypes.xusertype AND syscolumns.id = object_id('{$tbl_name}')"); $columns = array(); foreach( $result as $column )$columns[] = array('Field'=>$column['name']); return $columns; } /** * 构造函数 * * @param dbConfig 数据库配置 */ public function __construct($dbConfig) {//print_r($dbConfig);exit(); if(!function_exists('sqlsrv_connect'))spError('PHP环境未安装sqlsrv函数库!'); $linkfunction = 'sqlsrv_connect'; $this->conn = $linkfunction( $dbConfig['host'], array( 'UID'=>$dbConfig['login'], 'PWD'=>$dbConfig['password'], 'Database'=>$dbConfig['database'], ) ) or spError("数据库链接错误 : " . print_r(sqlsrv_errors(), true)); } /** * 对特殊字符进行过滤 * * @param value 值 */ public function __val_escape($value) { if(is_null($value))return 'NULL'; if(is_bool($value))return $value ? 1 : 0; if(is_int($value))return (int)$value; if(is_float($value))return (float)$value; if(@get_magic_quotes_gpc())$value = stripslashes($value); $search=array("\\","\0","\n","\r","\x1a","'",'"'); $replace=array("\\\\","[NULL]","\\n","\\r","\Z","''",'\"'); return '\''.str_replace($search,$replace,$value).'\''; } /** * 析构函数 */ public function __destruct() { @sqlsrv_close($this->conn); } /** * 转换MSSQL的LIMIT语句的转换函数 */ function translimit($sql){ if(preg_match('/ limit /i', $sql)){ //去连续空格 while(preg_match("/ /", $sql))$sql = str_replace(" "," ",$sql); $sql_array = explode(" ",$sql); //取得部分重要的数组索引 $i = 0; while(isset($sql_array[$i]) && $sql_array[$i]){ if(strtolower($sql_array[$i])=="from")$from_id = $i; if(strtolower($sql_array[$i])=="limit")$limit_id = $i; if(strtolower($sql_array[$i])=="order")$order_id = $i; $i++; } $last_id = $i-1; $two_num = explode(",",$sql_array[$limit_id+1]); $totle_num = $two_num[0]+$two_num[1]; $sql_return = "SELECT "; for($i=1;$i<=$from_id;$i++){ $sql_return .= $sql_array[$i]; $sql_return .= " "; } $sql_return .= " ( SELECT TOP {$two_num[1]} "; for($i=1;$i<=$from_id;$i++){ $sql_return .= $sql_array[$i]; $sql_return .= " "; } $sql_return .=" ( SELECT TOP {$totle_num} "; for($i=1;$i<$limit_id;$i++){ $sql_return .= $sql_array[$i] ; $sql_return .= " "; } $sql_return .= " ) AS SPTMP_MSSQL_TOTLERESULT "; if(preg_match("/ desc /i", $sql)){ for($i=$from_id+2;$i<$limit_id;$i++){ if(strtolower($sql_array[$i]) == "desc")continue; $sql_return .= $sql_array[$i]; $sql_return .= " "; } }else{ for($i=$from_id+2;$i<$limit_id;$i++){ $sql_return .= $sql_array[$i]; $sql_return .= " "; if($i == $order_id+2)$sql_return .= " DESC "; } } $sql_return .= " ) AS SPTMP_MSSQL_ALLRESULT "; for($i=$from_id+2;$i<$limit_id;$i++){$sql_return .= $sql_array[$i] ." ";} return $sql_return; }else{ return $sql; } }} 代码是$conn=new PDO("mssql:host=localhost;dbname=user_info","sa","jiushi"); 我确认用户名跟密码都没错,服务器名是localhost localhost 肯定是不行的,因为 localhost 不可能作为实例名当只有一个实例时,服务名默认为 机器名本地虚拟的实例名是 (local) localhost 跟***\sqlexpress这两个服务器有什么不同? 需要安装驱动....http://www.microsoft.com/download/en/details.aspx?id=8059 翻页post参数丢失如何解决? php生成文件中文乱码 在线等分割字段的问题,高手进 如何让pdf自动分页[FPDF] (/\.(\w+)$/)[1]正则表的意思? 请教大家一个SQL的问题. 熟悉 web2.0 相关技术的进来...... 怎样来调用服务器端的播放器来放音乐呢 请问在mysql中如何生成临时表哪? php连接mysql数据库执行sql语句连接上,获取不到里边内容!帮忙~ 做了一个小偷程序post无法查询结果 大家帮我看看,怎么获取这个文本框的焦点
/////////////////////////////////////////////////////////////////
// SpeedPHP中文PHP框架, Copyright (C) 2008 - 2010 SpeedPHP.com //
//////////////////////////////////////////////////////////////////**
* db_mssql MsSQL数据库的驱动支持
*/
class db_sqlsrv {
/**
* 数据库链接句柄
*/
public $conn;
/**
* 执行的SQL语句记录
*/
public $arrSql; /**
* 按SQL语句获取记录结果,返回数组
*
* @param sql 执行的SQL语句
*/
public function getArray($sql)
{
if( ! $result = $this->exec($sql) )return array();
//if( ! sqlsrv_num_rows($result) )return array();
$rows = array();
while($rows[] = sqlsrv_fetch_array($result,SQLSRV_FETCH_ASSOC)){}
sqlsrv_free_stmt($result);
array_pop($rows);
return $rows;
}
/**
* 返回当前插入记录的主键ID
*/
public function newinsertid()
{
$result = $this->getArray("select @@IDENTITY as sptmp_newinsert_id");
return $result[0]['sptmp_newinsert_id'];
}
/**
* 格式化带limit的SQL语句
*/
public function setlimit($sql, $limit)
{
if(!eregi(",", $limit))$limit = '0,'.$limit;
$sql .= " LIMIT {$limit}";
return $this->translimit($sql);
} /**
* 执行一个SQL语句
*
* @param sql 需要执行的SQL语句
*/
public function exec($sql)
{
$this->arrSql[] = $sql;
if( $result = sqlsrv_query($this->conn, $sql) ){
return $result;
}else{
if( ($errors = sqlsrv_errors() ) != null)
{
$msg = '';
foreach( $errors as $error)
{
$msg .= "message: ".$error[ 'message']."\n";
}
spError("{$sql}<br />执行错误: " . $msg);
}
}
}
/**
* 返回影响行数
*/
public function affected_rows()
{
return sqlsrv_rows_affected($this->conn);
} /**
* 获取数据表结构
*
* @param tbl_name 表名称
*/
public function getTable($tbl_name)
{
$result = $this->getArray("SELECT syscolumns.name FROM syscolumns, systypes WHERE syscolumns.xusertype = systypes.xusertype AND syscolumns.id = object_id('{$tbl_name}')");
$columns = array();
foreach( $result as $column )$columns[] = array('Field'=>$column['name']);
return $columns;
} /**
* 构造函数
*
* @param dbConfig 数据库配置
*/
public function __construct($dbConfig)
{//print_r($dbConfig);exit();
if(!function_exists('sqlsrv_connect'))spError('PHP环境未安装sqlsrv函数库!');
$linkfunction = 'sqlsrv_connect';
$this->conn = $linkfunction(
$dbConfig['host'],
array(
'UID'=>$dbConfig['login'],
'PWD'=>$dbConfig['password'],
'Database'=>$dbConfig['database'],
)
) or spError("数据库链接错误 : " . print_r(sqlsrv_errors(), true));
}
/**
* 对特殊字符进行过滤
*
* @param value 值
*/
public function __val_escape($value) {
if(is_null($value))return 'NULL';
if(is_bool($value))return $value ? 1 : 0;
if(is_int($value))return (int)$value;
if(is_float($value))return (float)$value;
if(@get_magic_quotes_gpc())$value = stripslashes($value);
$search=array("\\","\0","\n","\r","\x1a","'",'"');
$replace=array("\\\\","[NULL]","\\n","\\r","\Z","''",'\"');
return '\''.str_replace($search,$replace,$value).'\'';
} /**
* 析构函数
*/
public function __destruct()
{
@sqlsrv_close($this->conn);
} /**
* 转换MSSQL的LIMIT语句的转换函数
*/
function translimit($sql){
if(preg_match('/ limit /i', $sql)){
//去连续空格
while(preg_match("/ /", $sql))$sql = str_replace(" "," ",$sql);
$sql_array = explode(" ",$sql);
//取得部分重要的数组索引
$i = 0;
while(isset($sql_array[$i]) && $sql_array[$i]){
if(strtolower($sql_array[$i])=="from")$from_id = $i;
if(strtolower($sql_array[$i])=="limit")$limit_id = $i;
if(strtolower($sql_array[$i])=="order")$order_id = $i;
$i++;
}
$last_id = $i-1;
$two_num = explode(",",$sql_array[$limit_id+1]);
$totle_num = $two_num[0]+$two_num[1]; $sql_return = "SELECT ";
for($i=1;$i<=$from_id;$i++){
$sql_return .= $sql_array[$i];
$sql_return .= " ";
}
$sql_return .= " ( SELECT TOP {$two_num[1]} ";
for($i=1;$i<=$from_id;$i++){
$sql_return .= $sql_array[$i];
$sql_return .= " ";
}
$sql_return .=" ( SELECT TOP {$totle_num} ";
for($i=1;$i<$limit_id;$i++){
$sql_return .= $sql_array[$i] ;
$sql_return .= " ";
}
$sql_return .= " ) AS SPTMP_MSSQL_TOTLERESULT ";
if(preg_match("/ desc /i", $sql)){
for($i=$from_id+2;$i<$limit_id;$i++){
if(strtolower($sql_array[$i]) == "desc")continue;
$sql_return .= $sql_array[$i];
$sql_return .= " ";
}
}else{
for($i=$from_id+2;$i<$limit_id;$i++){
$sql_return .= $sql_array[$i];
$sql_return .= " ";
if($i == $order_id+2)$sql_return .= " DESC ";
}
}
$sql_return .= " ) AS SPTMP_MSSQL_ALLRESULT ";
for($i=$from_id+2;$i<$limit_id;$i++){$sql_return .= $sql_array[$i] ." ";}
return $sql_return;
}else{
return $sql;
}
}
}
本地虚拟的实例名是 (local)