这两天写一个工作量统计系统,需要使用PHP连接SQL Server 2005,然后集成在MOSS平台里面,头一次访问2005的版本,遇到了一些问题,把这些经验记录下来。本文纯属经验记录,不谈是专家之言,若有什么错误或者不清楚的地方,望来信告知:silentbalanceyh@126.com
一环境配置:
因为我自己机器是Windows 2008 + SQL Server 2008,所以我在使用的时候连接的是SQL Server 2008,后来发现基本功能两个版本区别不大,因为三方驱动都是微软提供的。需要说明的是,在PHP配置文件,即原生的php.ini里面需要修改一点东西,我没有尝试过去掉下边的注释是否可以访问05和08的数据库:
;extension=php_mssql.dll
我查阅了网上很多资料,这个PHP扩展是提供给SQL Server 2000用的,SQL Server 2005和 SQL Server 2008需要到微软官方去下载新的驱动,下载地址如下:
http://www.microsoft.com/downloads/details.aspx?FamilyId=61BF87E0-D031-466B-B09A-6597C21A2E2A&displaylang=en
官方文档有描述:
In its continued commitment to interoperability, Microsoft has released an updated SQL Server Driver for PHP. The SQL Server Driver for PHP download is available to all SQL Server users at no additional charge. The SQL Server Driver for PHP is a PHP 5 extension that allows for the reading and writing of SQL Server data from within PHP scripts. The extension provides a procedural interface for accessing data in all editions of SQL Server 2005 and SQL Server 2008.
根据官方文档的描述,微软提供的Driver是同时提供给SQL Server 2005和SQL Server 2008两个版本使用的。所以整体的环境配置步骤如下:
1)下载驱动(上边有链接地址)下载过后的驱动包里面的内容如下图:
2)拷贝驱动到相应的位置:
在Windows操作系统上配置过PHP环境的人应该都清楚,配置的时候若需要配置一个PHP的扩展,此扩展需要将相关的dll文件全部复制到PHP的扩展目录里面,然后通过修改php.ini来实现PHP的扩展,在php.ini里面需要指明扩展路径,一般情况是在最末尾添加一行:
extension_dir=""
""内的内容填写PHP的扩展目录名,约定俗成一般是放在PHP目录下的一个ext文件夹内,当然可以将目录配置到任何地方(没有测试过)。把上图解压开的dll文件拷贝到extension_dir设置的扩展目录里面。
3)修改php.ini实现扩展:
在php.ini的一大堆;extension=**.dll格式里面添加两行,此部分位于以下注释下边一般:
; Windows Extensions
; Note that ODBC support is built in, so no dll is needed for it.
; Note that many DLL files are located in the extensions/ (PHP 4) ext/ (PHP 5)
; extension folders as well as the separate PECL DLL download (PHP 5).
; Be sure to appropriately set the extension_dir directive.
添加的两行内容为:
extension=php_sqlsrv_ts.dll
extension=php_sqlsrv.dll
注意=号右边是解开过后的扩展的两个驱动的文件名,必须保证此文件在配置好的扩展目录内,而且需要注意此处最初不需要带“;”。【*:在php.ini文件里面,首部分号的含义代表行注释,如果有分号的时候,服务器在读取配置的时候会略过分号这一行不去读取相关内容,只有没有加分号的行才会被服务器读取。】
这里解释一下,两个驱动程序的区别在于,php_sqlsrv_ts.dll是线程安全的驱动,如果服务器本身的环境是使用的php5ts.dll,就是用这个驱动;php_sqlsrv.dll不是线程 安全的,这种情况下,服务器运行PHP应该加载的是php5.dll
4)测试配置环境:
整个过程操作好了过后,写一个test.php测试一下配置的相关环境,测试代码如下:
<?php
phpinfo();
?>
若出现以下图片证明环境已经配置好了:
这里列举一下开发环境,以防出现不同环境有差异的地方:
OS:Windows Server 2008 x64 Enterprise Edition
WebServer:Apache 2.2.11
Database:SQL Server 2008 x64 Enterprise Edition
PHP:5.2.9
(*:在配置PHP环境的时候,如果是解压缩的版本,在Windows平台上需要拷贝PHP根目录下所有的DLL文件到Windows的目录里面,需要说明的是:Windows 32位系统的目标目录为:$:\Windows\System32,Windows 64位环境的目标目录为:$:\Windows\SysWOW64,这里$符号代表安装操作系统的盘符号。而且本文的Driver好像运行的最低PHP版本应该为5.2.6,官方文档里面说的测试版本是使用的PHP5.2.6,至于低版本是否可以运行,我没有测试。)
二连接数据库:
使用过SQL Server的人应该都清楚,SQL Server常用的有两种认证方式,一种是本地系统账户认证(Windows Authentication ),一种是使用用户名和密码(SQL Server Authentication ),第二种认证方式必须启用SQL Server的混合模式。
1.Windows Authentication连接部分代码段:
<?php
$serverName = "(local)";
$connectionInfo = array("Database"=>"TestingInfo","ConnectionPooling"=>false);
$conn = sqlsrv_connect( $serverName,$connectionInfo);
if( $conn == false)
{
echo "连接失败!";
die( print_r( sqlsrv_errors(), true));
}
?>
2.SQL Server Authentication连接部分代码段:
<?php
$serverName = "(local)";
$uid = "sa";
$pwd = "******";
$connectionInfo = array("UID"=>$uid,"PWD"=>$pwd,"Database"=>"TestingInfo");
$conn = sqlsrv_connect( $serverName,$connectionInfo);
if( $conn == false)
{
echo "连接失败!";
die( print_r( sqlsrv_errors(), true));
}
?>
参考官方提供的英文原文档,针对参数$connectionInfo做一个简单说明,因为$connectionInfo是一个Hash表结构,下边参数格式为:
Key[DataType]:
Description(Default Value):键[数据类型]:描述(默认值)
【1】APP[String类型]:
使用的应用程序名称【*:我自己不太懂得这个地方的意义,不好意思】(没有默认值)
【2】ConnectionPooling[1或true为打开连接池,0或false为关闭连接池]:
用来设置是否打开SQL Server的连接池功能(默认值为true(1))
【3】Database[String类型]:
连接的数据库的名称,所有连接提供的数据库名称类似ASP.NET里面web.config的连接字符串里面的数据库实例名,如果设置了Database的连接属性,驱动会默认使用SQL Server支持的Transact-SQL脚本来操作所有提供的数据库实例,包括添加、删除、查询、修改等各种操作(默认为登陆的操作系统里面的数据库,我没有测试过,应该是直接运行程序的(local))
【4】Encrypt[1或true为执行加密,0或false为不执行加密]:
设置是否对传入服务器的SQL脚本执行加密操作,当然如果使用加密操作会对系统性能存在一定影响,不过影响不明显(默认为false(0))
【5】Failover_Partner[String类型]:
提供一个服务器镜像,此属性应该是用于主服务器Down掉的情况,当主服务器Down掉的时候,提供一个备份的数据库和服务器的实例镜像作为备份的服务器处理。(未设置默认值)
【6】LoginTimeout[Integer类型]:
提供连接的超时时间,时间单位为秒。(未设置)
【7】PWD[String类型]:
当使用SQL Server Authentication认证方式的时候需要提供该属性,该属性为登陆用户的密码。(未设置任何值)
【8】QuotedId[1或true就是用SQL-92标准,0或false就是用遗留的标准]:
设置使用SQL脚本的标准是使用SQL-92标准还是使用遗留的Transact-SQL标准。(默认值为true(1))
【9】TraceFile[String类型]:
此属性主要为监控数据使用,可用于调试或者维护,它的值为一个路径,SQL Server会将所有的数据执行操作写入该路径,至于具体内容是什么,我没有使用过。(未设置默认值)
【10】TraceOn[1或true打开监控,0或false关闭监控]:
是否打开ODBC连接方式的监控。(默认值false(0))
【11】TransactionIsolation[常量值]:
提供数据库的事务级别(SQLSRV_TXN_READ_COMMITTED)
常量值包括
SQLSRV_TXN_READ_UNCOMMITTED,
SQLSRV_TXN_READ_COMMITTED,
SQLSRV_TXN_REPEATABLE_READ,
SQLSRV_TXN_SNAPSHOT,
SQLSRV_TXN_SERIALIZABLE
【12】TrustServerCertificate[1或true设置为客户端限制,0或false设置为客户端不限制]:
如果设置为 true,则使用 SSL 对通道进行加密,但不通过证书链对可信度进行验证。如果将TrustServerCertificate 设置为 true 并将 Encrypt 设置为 false,则不对通道进行加密。可识别的值为 true、false、yes 和 no。有关更多信息,请参见 SQL Server 2005 Books Online(《SQL Server 2005 联机丛书》)中的“Encryption Hierarchy”(加密层次结构)和“Using Encryption Without Validation”(使用不验证的加密)。(默认值:false(0))
【13】UID[String类型]:
当使用SQL Server Authentication认证方式的时候需要提供该属性,该属性为登陆用户的用户名。(未设置任何值)
【14】WSID[String类型]:
监控计算机名称,此属性很少用。(未设置任何值):
总结:
因为没有时间讲解连接过后的关于SQL的基本操作和详细操作,仅仅提供一个实例供参考,望谅解,若有笔误的地方,请指点:silentbalanceyh@126.com。还有更加详细的内容请参考驱动下载过后的官方文档,下载驱动过后微软提供了详细的CHM官方文档,如何使用驱动都提供了部分例子。
——2009.7.11
分享到:
相关推荐
### SQL Server 2005 启用远程连接详解 #### 一、为SQL Server ...通过以上步骤,我们可以成功地为SQL Server 2005启用远程连接,并确保了安全性和可用性。这对于管理和维护部署在不同地理位置上的数据库非常有帮助。
Sql Server 2005 打开 Sql Server 2008 mdf 文件数据库转换是指将 Sql Server 2008 中的数据库文件(mdf 文件)转换为 Sql Server 2005 可以识别的格式,以便在 Sql Server 2005 中使用。这种转换过程需要使用 Sql ...
本实例将详细解释如何使用MFC和ADO来建立与SQL Server 2005的连接,并执行SQL查询。 首先,我们需要引入ADO的库。在`ADOConn.h`文件中,`#import`语句导入了`msado15.dll`库,这是ADO的主要组件。`no_namespace`和`...
本主题主要关注如何下载和使用适用于PHP连接SQL Server 2005及以上的驱动。 标题“php连接sqlserver2005及以上版本驱动下载”指出,我们需要关注的是PHP与SQL Server 2005或更高版本的兼容性问题。PHP的原生mssql...
本压缩包包含了针对32位和64位系统的两个补丁:SQLServer2005_BC.msi 和 SQLServer2005_BC_x64.msi,主要目的是为了提升SQL Server 2005 Business Intelligence (BI)组件的兼容性和性能。 SQL Server 2005 Business...
这些组件确保了与SQL Server 2005相关的功能和特性在更高版本的数据库服务器中得以支持,这对于那些基于旧版SQL Server构建并无法立即迁移的应用程序至关重要。 SQLServer2005_BC.msi 文件是这个向后兼容组件的安装...
### PHP安装连接SQLSERVER扩展方法 #### 背景与目的 在开发基于Web的应用程序时,PHP(Hypertext ...通过以上步骤,我们就可以成功地让PHP连接并操作SQL Server数据库,从而实现更加高效和灵活的数据管理。
之前连接了无数次,看了无数教程,说得非常非常复杂,但都都没连接成功,浪费我一整天。现在终于找到方法了,连接不上的童鞋,试试...ntwdblib.dll是连接SQL Server2005服务器的,上面两个文件版本必须与PHP版本相同。
此外,VS2010还支持LINQ to SQL和Entity Framework,它们是ORM(对象关系映射)技术,能简化数据库操作。LINQ to SQL允许你使用C#或VB.NET的查询语法直接操作数据库,而Entity Framework则提供更高级的模型化和数据...
总的来说,Java通过JDBC驱动程序连接SQL Server 2008是一个常见的任务,涉及到类路径配置、驱动加载、数据库连接的建立和关闭等步骤。正确地理解和运用这些知识点对于任何需要Java与SQL Server交互的项目都是至关...
SQL Server 2005/2008 Express Profiler 是微软SQL Server数据库管理系统中一个强大的性能监视工具,尤其适用于SQL Server 2008 Express版本。它允许开发者和DBA(数据库管理员)深入地洞察数据库系统的运行情况,...
标题"JDBC连接SQL server 2005 驱动"指出了本主题的核心,即如何使用Java Database Connectivity (JDBC) API来建立和管理Java程序与Microsoft SQL Server 2005数据库之间的连接。这里涉及的关键技术是JDBC驱动,它是...
【在Eclipse中使用JDBC连接SQL Server 2005的步骤详解】 要使用Java的JDBC(Java Database Connectivity)在Eclipse中连接到SQL Server 2005,你需要遵循以下步骤: 1. **准备工作**: - 安装必备软件: - ...
Microsoft SQL Server Management Studio Express(SSMSE)是一种免费、易于使用的图形管理工具,用于管理SQL Server 2005 Express Edition和SQL Server 2005 ExpressEdition with Advanced Services。注意:SSMSE ...
SP4是SQL Server 2005的最后一个服务包,它整合了自SQL Server 2005 RTM(Release to Manufacturing)以来的所有累积更新,确保用户能够获取到最全面的修复和改进。 SQL Server 2005 SP4分为两个版本,分别针对不同...
这个驱动提供了连接、查询、更新和管理SQL Server 2008 R2数据库的功能。 3. **连接过程**:在Java中,使用`Class.forName()`方法加载驱动,然后通过`DriverManager.getConnection()`方法创建数据库连接。例如: `...
标题 "php链SQLServer2005/SQLServer2008" 涉及到的是在PHP环境中连接和操作Microsoft SQL Server 2005或2008数据库的技术。这一主题涵盖了一系列的步骤和组件,包括安装、配置以及使用PHP的sqlsrv驱动程序。 首先...
Microsoft SQL Server 2005 Backward Compatibility Components (Microsoft SQL Server 2005 向后兼容组件) SQL Server Backward Compatibility 包中包含 最新版本的 Data Transformation Services 2000 运行时 ...
标题 "kettle 连接sqlserver 驱动" 涉及到的是在数据集成工具 Pentaho Data Integration(简称 Kettle 或 PDI)中,如何配置和使用 SQL Server 数据库的连接。Kettle 是一个强大的ETL(Extract, Transform, Load)...
提供的文档"VS2015 连接SQL server2014.docx"和"VS2015 连接SQL server2014.pdf"可能会更深入地介绍这些过程,包括详细的步骤和可能遇到的问题解决策略。建议仔细阅读这些文档,以便更好地理解和实践VS2015与SQL ...