php连接微软MSSQL(sql server)完全攻略


Posted in PHP onNovember 27, 2016

在研究ezSQL的时候就看到了mssql_connect()等一些php提供的连接MSSQL的函数,本以为php这个开源的风靡世界的编程语言对连接微软的数据应该是不在话下的,但是到真正执行的时候,才发现困难多多。

一开始我下载的php版本是5.93的,下载下来添加环境变量等等搞了半天后,phpinfo()这个函数终于成功的运行在浏览器中了。然后当我在满世界的找php_mssql.dll,才发现在5.3以及以上版本的php中已经不是原生态的支持mssql了。

好不容易找到了微软Microsoft Drivers 3.0 for PHP for SQL Server,心想微软的东西应该做的可以,却无奈的发现SQLSRV30.EXE没有办法运行:“SQLSRV30.EXE 不是有效的win32程序”。

在网上搜索了半天,总结了以下一些可行的办法,但是在这之前你需要:

配置MICROSOFT SQL SERVER

1、下载并安装sql server。现在这个版本就比较多了从2000 到2008不等,找一个你自己下载吧。

2、开放tcp/ip连接方式,使得数据库能够远程访问。SQL Server Configuration Manager -> Network Configuration -> Protocols -> TCP/IP enabled

3、打开数据管理界面,添加用户和数据库。

4、安装php和配置IIS服务。

5、打开php所在文件夹里面的 php.ini文件,并添加:

mssql.textlimit = 20971520
mssql.textsize = 20971520

做完了这些之后,你可以按照下面三种方法来连接数据库了:

使用php自带的方法连接MSSQL(5.3及以后版本不适用)

确保php ext扩展库文件夹下有php_mssql.dll,然后在PHP.ini中的配置中,将

;extension=php_mssql.dll

前面的“;”去掉。

然后你可以测试连接了:

//连接MSSQL
$conn=mssql_connect("实例名或者服务器IP","用户名","密码");

//测试连接
if($conn)
{
 echo "连接成功";
}

Microsoft Drivers for SQL Server for PHP

2008年7月微软发布了一个新的为php连接SQL Server的驱动,它改善了php自带的连接MSSQL函数的一些缺点,并且是以php扩展插件的形式开发的,通过它你可以用php轻松的读写微软的数据库了。

如果你服务器使用的是IIS的话,那么就一定要从这里去下载:

http://php.iis.net/

因为从上述链接进去其实是微软整合的网络开发平台,只提供在线安装,但是很方便的整合了PDO插件和php,当然还有微软的其它一些开发功能,但是如果你没需要,你可以不装了,那些是在visual studio中的。

但是如果你用的是 Apache的话,你可以去这里直接下载这个插件了,它其实是一个解压文件,解压出来几个DLL文件,具体操作如下:

1)下载驱动包:http://www.microsoft.com/en-us/download/details.aspx?id=20098.

2)将DLL文件解压到 PHP extension_dir 目录,如果出现说SQLSRV30.EXE 不是有效的win32程序,可能是缺少某些库,可能是vc10,也有可能是没有用administrator权限运行。

extension_dir = “C:\PHP\ext”

php连接微软MSSQL(sql server)完全攻略

3)在php.ini配置文件内引用相应的动态链接库文件

extension=php_sqlsrv_52_ts_vc6.dll
extension=php_pdo_sqlsrv_52_ts_vc6.dll
extension=php_pdo.dll

其中的52、53表示就是php的5.2.x和5.3.x 版本,选择跟你php版本相匹配的;
选择vc6或vc9的主要看你使用的是什么web服务器软件,如果使用的是IIS那就选择vc9的,如果是Apache则选择vc6的。
至于ts和nts,就要看你安装的php版本是线程安全版的还是非线程安全版,ts是线程安全,nts是非线程安全。

4)重启Apache
5)连接数据库

测试连接代码:

<?php
//本地测试的服务名
"(local)";
//使用sql server身份验证,参数使用数组的形式,一次是用户名,密码,数据库名
//如果你使用的是windows身份验证,那么可以去掉用户名和密码
$connectionInfo = array( "UID"=>"root",
    "PWD"=>"root2010",
    "Database"=>"master");

$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn )
{
 echo "Connection established.\n";
}
else
{
 echo "Connection could not be established.\n";
 die( print_r( sqlsrv_errors(), true));
}
 ?>

在windows下使用FreeTDS

什么是FreeTDS? FreeTDS其实就是一个开源(或者可以说成自由)的C程序库,它可以实现在Linux系统下访问操作微软的SQL数据库。可以用在Sybase的db-lib或者ct-lib库,在里面也包含了一个ODBC的库。允许许多应用软件连接到Sybase或者微软的SQL服务器。FreeTDS是以源码的现实发布的,正因为是这样,所以它几乎可以在任何系统中进行编译安装。

如如你的服务器是Windows系统, 那么你应该使用 php_dblib.dll。(more information on Using FreeTDS for Unix.)

通常我们可以在这个网站上找到这些DLL文件- Frank Kromann's site, 但是它基本上很多都已经过时了,并且会引发很多的问题,因此我们推荐windows下使用PHP 5.2.x版本,并且看看下面的建议 :

1. 按照下面的表格来下载 php_dblib.dll 并且将其保存到 /PHP/ext 文件夹下面.


PHP version Thread Safe FreeTDS version Download URL
PHP 5.2.x (vc6) Yes 0.82 + 20090302 patches Download!
No 0.82 + 20090302 patches Download!
PHP 5.3.x (vc9) Yes 0.82 + 20090904 patches Download!
No 0.82 + 20090904 patches Download!
PHP 5.4.x (vc9) Yes 0.82 + 20110906 patches Download! FTP Download!
No 0.82 + 20110906 patches Download! FTP Download!

2、 FreeTDS 需要安装 .NET Framework v1.1 ,你可以到微软的网站去下载。或者你去Frank's site 下载需要的DLL文件,并保存到你的/PHP根目录下面。

3、在php配置文件 /PHP/php.ini 中添加:

extension=php_dblib.dll

4、当php引擎启动FreeTDS模块的时候需要传递一些信息,使得FreeTDS能够连接到它的默认的数据库。因此它的需要在freetds.conf中定义数据库连接的基本信息,该文件在其根目录下,可以按照你的情况来进行修改:

[global]
host = xxx.xxx.xxx.xxx (host name or ip of the MSSQL server)
port = 1433
client charset = UTF-8
tds version = 8.0
text size = 20971520
5、创建config.php文档来定义数据库连接参数:

$CFG->dbtype = 'mssql'; // Required
$CFG->dbhost = 'localhost'; // assuming MS SQL is on the same server, otherwise use an IP
$CFG->dbname = 'moodle';  // or whatever you called the database you created
$CFG->dbuser = 'yourusername'; // I usually use the 'sa' account (dbowner perms are enough)
$CFG->dbpass = 'yourpassword';
$CFG->dbpersist = false;
$CFG->prefix = 'mdl_';  //Prefix, you can change it, but NEVER leave it blank.

6、 重启你的网站,如果还是没有连接到你的数据库的话,在 /PHP/php.ini文件中将display_startup_errors改为"On",当你解决了这些问题之后再将错误报告改为“Off”;
7、测试你的网站,建立test.php文件,代码如下,访问http://localhost/test.php进行测试

<?php
	$link = mssql_connect('localhost', 'db_user', 'db_password');
	if(!$link) {
		echo'Could not connect';
		die('Could not connect: ' . mssql_error());
	}
	echo'Successful connection';
	mssql_close($link);
?>

好了windows下使用FreeTDS网上的资料一大堆就不再讲了,至此,此篇日志结束。

PHP 相关文章推荐
php smarty模版引擎中的缓存应用
Dec 02 PHP
PHP XML操作类DOMDocument
Dec 16 PHP
php 生成随机验证码图片代码
Feb 08 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
Sep 28 PHP
php 批量替换html标签的实例代码
Nov 26 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
PHP多个文件上传到服务器实例
Oct 29 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 PHP
PHP内核学习教程之php opcode内核实现
Jan 27 PHP
php实现的读取CSV文件函数示例
Feb 07 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
php源码之将图片转化为data/base64数据流实例详解
Nov 27 #PHP
PHP使用curl函数发送Post请求的注意事项
Nov 26 #PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 #PHP
PHP数组相加操作及与array_merge的区别浅析
Nov 26 #PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 #PHP
PHP 匿名函数与注意事项详细介绍
Nov 26 #PHP
PHP实现的登录,注册及密码修改功能分析
Nov 25 #PHP
You might like
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
如何使用jquery控制CSS样式,并且取消Css样式(如背景色,有实例)
2013/07/09 Javascript
jquery处理页面弹出层查询数据等待操作实例
2015/03/25 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
Angular中$compile源码分析
2016/01/28 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
基于vue2框架的机器人自动回复mini-project实例代码
2017/06/13 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
用vscode开发vue应用的方法步骤
2019/05/06 Javascript
通过实例学习React中事件节流防抖
2019/06/17 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
Python pass 语句使用示例
2014/03/11 Python
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python实现把json格式转换成文本或sql文件
2015/07/10 Python
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
Python注释详解
2016/06/01 Python
python中函数传参详解
2016/07/03 Python
python使用sqlite3时游标使用方法
2018/03/13 Python
python多线程同步实例教程
2019/08/11 Python
Django 拆分model和view的实现方法
2019/08/16 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
在C中是否有模拟继承等面向对象程序设计特性的好方法
2012/05/22 面试题
升职演讲稿范文
2014/05/23 职场文书
企业精神口号
2014/06/11 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
大学生就业意向书
2015/05/11 职场文书
Python道路车道线检测的实现
2021/06/27 Python
go select编译期的优化处理逻辑使用场景分析
2021/06/28 Golang
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android