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 is_dir() 判断给定文件名是否是一个目录
May 10 PHP
PHP抽象类 介绍
Jun 13 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
php选择排序法实现数组排序实例分析
Feb 16 PHP
关于php中的json_encode()和json_decode()函数的一些说明
Nov 20 PHP
CI框架表单验证实例详解
Nov 21 PHP
Thinkphp整合微信支付功能
Dec 14 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
PHP观察者模式定义与用法实例分析
Mar 22 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
Jul 03 PHP
JS中彻底删除JSON对象组成的数组中的元素
Sep 22 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
DOTA2【瓜皮时刻】Vol.91 RTZ山史最惨“矿难”
2021/03/05 DOTA
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
PHP parse_url 一个好用的函数
2009/10/03 PHP
深入解析Session是否必须依赖Cookie
2013/08/02 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
PHP children()函数讲解
2019/02/03 PHP
在laravel框架中实现封装公共方法全局调用
2019/10/14 PHP
深入理解requestAnimationFrame的动画循环
2016/09/20 Javascript
JavaScript交换两个变量值的七种解决方案
2016/12/01 Javascript
ES6学习教程之模板字符串详解
2017/10/09 Javascript
vue实现公告栏文字上下滚动效果的示例代码
2020/06/16 Javascript
Vue 根据条件判断van-tab的显示方式
2020/08/03 Javascript
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
matplotlib savefig 保存图片大小的实例
2018/05/24 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
Django模型序列化返回自然主键值示例代码
2019/06/12 Python
python中通过selenium简单操作及元素定位知识点总结
2019/09/10 Python
Python tensorflow实现mnist手写数字识别示例【非卷积与卷积实现】
2019/12/19 Python
Python和Sublime整合过程图示
2019/12/25 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
Python如何输出警告信息
2020/07/30 Python
Python3获取cookie常用三种方案
2020/10/05 Python
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
小学生安全保证书
2014/02/01 职场文书
九一八事变演讲稿范文
2014/09/14 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
2014年加油站工作总结
2014/12/04 职场文书
入党积极分子群众意见
2015/06/01 职场文书
2016年七夕爱情寄语
2015/12/04 职场文书
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS