php调用SQL SERVER 2008及以上版本的方法

       今天遇到php连接mssql问题,按照网上各种尝试,最后成功,再此记录下。由于 php 5.3以后就不支持mssql,如果继续用mssql_打头的函数,那是行不通了,要下载相应的The SQL Server Driver for PHP。现在微软官网有四个安装包:SQLSRV20/30/31/32.exe

用于 SQL Server Driver for PHP 的 API 名称是 sqlsrv。所有 sqlsrv 函数都以 sqlsrv_ 打头,后跟动词或名词。后跟动词的函数用于执行特定操作,而后跟名词的函数用于返回特定形式的元数据。

以下是官方对各php driver支持的php版本及对数据库支持的清单:

  • Version support for PHP is as follows
    • Version 3.2 supports PHP 5.6, 5.5, and 5.4
    • Version 3.1 supports PHP 5.5 and 5.4
    • Version 3.0 supports PHP 5.4.

函数 说明

sqlsrv_begin_transaction

开始事务。

sqlsrv_cancel

取消语句;并放弃相应语句的所有未决结果。

sqlsrv_client_info

提供有关客户端的信息。

sqlsrv_close

关闭连接。释放与相应连接关联的所有资源。

sqlsrv_commit

提交事务。

sqlsrv_configure

更改错误处理和日志记录配置。

sqlsrv_connect

创建一个连接,并将其打开。

sqlsrv_errors

返回关于上一操作的错误和/或警告信息。

sqlsrv_execute

执行预定义语句。

sqlsrv_fetch

使下一行的数据可供读取。

sqlsrv_fetch_array

以数值索引数组、关联数组或这两种数组的形式检索下一行的数据。

sqlsrv_fetch_object

以对象形式检索下一行的数据。

sqlsrv_field_metadata

返回字段元数据。

sqlsrv_free_stmt

关闭语句。释放与相应语句关联的所有资源。

sqlsrv_get_config

返回指定配置设置的值。

sqlsrv_get_field

按索引检索当前行中的字段。可以指定 PHP 返回类型。

sqlsrv_has_rows

检测结果集是否具有一行或多行。

sqlsrv_next_result

使下一结果可供处理。

sqlsrv_num_rows

报告结果集中的行数。

sqlsrv_num_fields

检索活动结果集中的字段数。

sqlsrv_prepare

准备 Transact-SQL 查询,但不执行该查询。隐式绑定参数。

sqlsrv_query

准备 Transact-SQL 查询,并将其执行。

sqlsrv_rollback

回滚事务。

sqlsrv_rows_affected

返回有所修改的行的数目。

sqlsrv_send_stream_data

在每次调用函数时向服务器发送最多八千字节 (8 KB) 的数据。

sqlsrv_server_info

提供有关服务器的信息。

我也上一些代码以供参考:
$MSSQL_SERVER="localhost";
$connectionInfo = array( "Database"=>"DBNAME", "UID"=>"sa", "PWD"=>"123456");
/*********************/
/*                   */
/*  Version : 5.1.0  */
/*  Author  : RM     */
/*  Comment : ms_conn.php */
/*                   */
/*********************/
//MSSQL连接部分
	
function open_mssqlconn( )
{		
	global $mssql_connection;
	include_once( "oa_config.php" );
	if (!$mssql_connection){
	   $mssql_link=sqlsrv_connect( $MSSQL_SERVER, $connectionInfo);	   	   
	   if (!$mssql_link){
			echo "Could not connect.\n";
			die( print_r( sqlsrv_errors(), true));
	   }
	   return $mssql_link;
	} else {
		return $mssql_connection;
	}
}
//SQL查询
function mssqlquery($Q)
{
	if (!$mssql_connection){
		$mssql_connection=open_mssqlconn();
	}
	$cursor=sqlsrv_query($mssql_connection,$Q);
	if ( !$cursor )
	{
		echo "SQL查询出错.\n";
		die( print_r( sqlsrv_errors(), true));
	}
	return $cursor;
}
//执行SQL
function mssqlexec($Q){
	$stmt = sqlsrv_prepare( $mssql_connection, $Q);
	if( $stmt===false )
	{		 
		 echo "SQL预编译出错.\n";
		 return false;
		 die( print_r( sqlsrv_errors(), true));		 
	}
	/* Execute the statement. Display any errors that occur. */
	if( sqlsrv_execute( $stmt)===false)	
	{
		 echo "执行SQL出错.\n";
		 return false;
		 die( print_r( sqlsrv_errors(), true));
	}
	/* Free the statement and connection resources. */
	sqlsrv_free_stmt($stmt);
	return true;
}
if (!$mssql_connection)
{
    $mssql_connection=open_mssqlconn();
}
调用写封装好的方法:
//获取存货名称
	public function getcinvname(){
		$cinvcode=iconv("UTF-8","GBK", $_POST["cinvcode"]);
		$query="select cinvname from inventory where cinvcode='{$cinvcode}'";			
		$cursor=mssqlquery($query);
		$cinvname='';
		while($ROW=sqlsrv_fetch_array($cursor,SQLSRV_FETCH_ASSOC)){
			$cinvname=iconv("GBK","UTF-8",$ROW["cinvname"]);
		}
		sqlsrv_free_stmt($cursor);
		$this->returnajax(0,$cinvname);
	}	





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值