课前小知识普及:MSSQL和SQL Server是同一个软件,叫法不同而已,MSSQL全称是Microsoft SQL Server,MSSQL是简写,有些人则喜欢直接叫SQL Server,我就比较喜欢这种叫法,有韵味、、、


最近有用户在使用PHPWAMP的时候,向我咨询一个问题,就是关于PHP如何连接MSSQL数据库。


平时我们搭建网站通常是PHP+Mysql数据库

不过在项目中,我们有时候必须要用到PHP+MSSQL数据库,那应该怎么办呢?

本文案例采用的PHP集成环境是我最新发布的版本PHPWAMP8.1.8.8,不管你用的是其他集成环境,还是自己安装,操作方法都是一样的,不过我还是建议大家使用我的这款PHPWAMP,我所集成的组件全是完整版,完美无错省心省力,放在U盘随时使用(支持自定义PHP版本,多版本同时运行)


其实早前我就有打算将MSSQL整个数据库也绿化到PHP集成环境里面,不用安装直接使用。

不过MSSQL数据库面对企业是收费的,所以我不敢将其绿化,万一追究起来,我就懵逼了。

你们可以自己先安装好数据库后,按照我的方式去连接就可以了,后面我会详细演示整个流程。


先来演示“本地测试时”常用的搭建方式,然后再演示网站在服务器上正式运营的搭建方式。

其实没啥区别,主要是演示常规用法以及站点管理里面的用法,让各位更加熟练的使用罢了。


先来给大家演示php5.3连接MSSQL数据库的具体做法吧(数据库是SQL Server 2008)

在PHPWAMP中,点这里默认启动的是php5.3,点击启动(其他PHP版本请自行切换)

wKiom1hto5nil9G1AADQDTKIt_g477.png-wh_50


启动后,点击此处浏览网站

wKiom1hto8aBbAo4AAC5Uky15Yo834.png-wh_50



在此页面的最底部,点击“点击此处查看phpinfo文件”,查看更加详细的环境内容。

wKiom1htpFDCSWjCAADiei_K6HU138.png-wh_50




来到phpinfo文件页面,看到这里的Thread Safety显示的是enabled

Thread Safety是线程安全的意思,而enabled是启动的意思,说明目前是线程安全。


如果Thread Safety显示的不是enabled,而是disabled,那么就是非线程安全。

看图片很明显,目前是线程安全,而且是VC6

wKioL1htpPyDlPkrAABAmTk55R8959.png-wh_50


PHP5.3以上的版本,连接MSSQL数据库不再是mssql.dll扩展,取而代之的是sqlsrv.dll扩展。

因为要选择对应的驱动程序,所以要判断是非线程安全还是线程安全,微软公司提供了相关驱动,

用于PHP支持MSSQL数据库。那么我下面有这么多版本的驱动,应该选哪个呢

(Lccee提示你:这些驱动在这篇文章的附件里面下载,包含了php所有版本的驱动)

wKiom1hvPrbjYE17AAK5P7Hpa1Q363.png-wh_50



刚才我们开启的PHP版本是5.3,然后又是线程安全,而且phpinfo页面显示是VC6

所以要选择的是php_pdo_sqlsrv_53_ts_vc6.dllphp_sqlsrv_53_ts_vc6.dll这两个。

wKiom1hu9X_QmeTZAAH9QJsRPLg872.png-wh_50

所以很多用户说连接失败,就是因为你选择的驱动版本有问题,要对号入座才行。




打开PHPWAMP版本文件所在目录。

wKioL1hu9fDxzuqTAADz5xwBgtY950.png-wh_50




来到对应的ext目录,把php_pdo_sqlsrv_53_ts_vc6.dll和php_sqlsrv_53_ts_vc6.dll复制进去

这两个驱动文件一个是以pdo的方式连接,另一个则是sqlsrv_connect的方式连接。

wKioL1hu9kCwquIhAAF0py-zjxY821.png-wh_50


复制进去后如下图所示。

wKioL1hu9qby3OneAAKfZJDhtrw527.png-wh_50




好,接着下一步,打开对应版本的PHP配置文件

wKiom1hu9srgTM2JAADZQtzW_jM766.png-wh_50




在打开的php.ini文件中

extension=php_sqlsrv_53_ts_vc6.dll

extension=php_pdo_sqlsrv_53_ts_vc6.dll

加入上面这两行,然后搜索“mssql.secure_connection”这一段内容,

将“mssql.secure_connection = Off”改为“mssql.secure_connection = On”

wKioL1hvQIvAcy12AAB9V3gF6j0573.png-wh_50



修改完成后,双击此处重启当前apache服务器即可。

wKioL1hu9_mQCnsFAAC7U3HE8Oc585.png-wh_50



重启后,在phpinfo页面如果能搜到sqlsrv,说明已经成功配置好了,如图所示。

wKiom1hvQPrD6b0FAACUXbLGvlU373.png-wh_50

wKiom1hvQRvycYIuAAAdacD7HVo125.png




接下来我们来连接一下数据库,看是否正常!

在测试数据库之前,我们先来查看一下数据库端口号是多少,右键“新建查询”

wKiom1hvQkzDlRbEAAD71VMhifA532.png-wh_50



输入exec sys.sp_readerrorlog 0, 1, 'listening' 然后右键点击执行。

wKiom1hvQouglBP-AAFJfjAlh7Y080.png-wh_50


发现端口号是默认的1433,这样我们在连接数据库的时候就不需要指定端口号了,

因为是默认端口,所有我们可以在PHP页面可以这么写。代码随便打打,证明能连接上就行了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 
  try  {
    $dbName  "sqlsrv:Server=127.0.0.1;Database=lccee" ;    //这里是服务器IP地址和数据库名,端口不是默认的话记得改一下
    $dbUser  "sa" ;     //用户名
    $dbPassword  "111111" ;     //登陆密码
 
    $db  new  PDO( $dbName $dbUser $dbPassword );   
     
    if  ( $db )   
   {       
      echo  "恭喜你!数据库连接成功了!!<br />" ;   
    }
 
 
      }
         catch  (Exception  $e ){  echo  "数据库连接失败!!" ;   }
 
?>


如果不是默认端口,假设是1688端口,那么上面这一行就应该改为。

1
$dbName  "sqlsrv:Server=127.0.0.1,1688;Database=lccee" ;

当然,就算是默认端口,你也可以加上默认端口号,也是没错的,如下代码所示。

1
$dbName  "sqlsrv:Server=127.0.0.1,1433;Database=lccee" ;

易错点:这里的ip+端口,不是冒号!而是逗号,如果写成“127.0.0.1:1433”是错误的!



好,我们打开此页面看看效果,运行代码提示连接成功,说明没问题。

wKioL1hvRMDgs780AAA7mO6BccU632.png-wh_50



假设我把连接里面的数据库密码改一下,再看,就提示失败了,如下图。

wKiom1hvRQeg73qzAAA9Fc0q-8w888.png-wh_50





前面我们不是在php配置里加入了两个DLL吗,分别是

php_pdo_sqlsrv_53_ts_vc6.dll和php_sqlsrv_53_ts_vc6.dll

这两个驱动文件一个是以pdo的方式连接,另一个则是sqlsrv_connect的方式连接。



而上面我们演示的连接方式是pdo,现在我们来用sqlsrv_connect的方式连接。

那么代码可以这么写,创建一个sqlsrv_connect.php文件,里面写上如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
$serverName  "NEPTUNE-PC" //serverName\instanceName
$connectionInfo  array "Database" => "lccee" "UID" => "sa" "PWD" => "111111" );
$conn  = sqlsrv_connect(  $serverName $connectionInfo );
  
if $conn  ) {
      echo  "连接成功<br />" ;
} else {
      echo  "连接失败<br />" ;
      
}
 
?>


用sqlsrv_connect的方式连接,如果端口不是默认的1433,

那么这里$serverName 就写成$serverName = "127.0.0.1,1434"; 




然后再测试看,也是连接成功了!

wKiom1hvSBTDpdk0AAA8QJpxdj4503.png-wh_50



假如我把正确的密码111111改成了错误的密码888888,

(具体的数据库密码,看你自己的MSSQL数据库,我的密码是111111

wKioL1hvSGfARAFhAAB6fOf5Ba4422.png-wh_50


那么就显示连接错误了,把正确密码改成错误以后,就显示连接失败了。

wKioL1hvSJGR1z_BAAA4MI5D7T0334.png-wh_50




下面我们再改一下代码,读取数据库表里的内容,这是我创建的数据库,

数据库名为Lccee,在这个数据库里面有个表叫phpwamp。

wKiom1hvSYKRbR-SAAENIfoQ2NQ379.png-wh_50




然后我随便添加几行代码,用来读出数据表里面的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 
$serverName  "NEPTUNE-PC" //serverName\instanceName
$connectionInfo  array "Database" => "lccee" "UID" => "sa" "PWD" => "111111" );
$conn  = sqlsrv_connect(  $serverName $connectionInfo );
  
if $conn  ) {
      echo  "连接成功<br />" ;
} else {
      echo  "连接失败<br />" ;
      
}
 
$query  = "select * from phpwamp" ;
$result  = sqlsrv_query( $conn $query );
while ( $row  = sqlsrv_fetch_array( $result )){
  
        print_r( $row );
        echo  "<br>" ;
}
 
?>



然后保存,这时候我们再来看看,运行后就读出这个数据表里的内容了。

wKiom1hvSf3y8s8JAABWKR7eVNc288.png-wh_50






最后我们再演示一下,在服务器上用站点管理创建的站点如何连接MSSQL数据库。


开始我们的教程,第一步先把主界面修改成80端口,如下图所示。

wKiom1hvUJaBS4pzAAC-P6KraTg748.png-wh_50

wKioL1hvUL6SKsOrAADmMv-tigc826.png-wh_50




修改端口后切换到任意处在apache2.4之下的PHP版本,php5.5、php5.6、php7都可以。

wKiom1hvTdnj2CZDAADdRQDJEC8102.png-wh_50




然后打开apache2.4站点管理,如下图所示。

wKiom1hvTkOjtqNUAAEnRWa_3Sc202.png-wh_50



建立站点,如图所示(Apache2.4站点管理可建立无数站点,每个站点可指定不同的PHP版本,也可以自定义设置PHP版本,还可以多个不同PHP版本同时运行,右键功能丰富)如图下所示,我选的是php5.4这个版本,填写完毕后点击“添加站点”

wKiom1hvUdvRKeuEAADNYRvzaJM821.png-wh_50



添加后左侧站点列表里就会出现了添加的站点,右键站点选择“生成此站hosts内容”

wKioL1hvUj_zEIQdAAD5JwmN8ls315.png-wh_50



然后点击此处的按钮去运行站点,如下图红色箭头所示。

wKioL1hvUr2y9HEdAAC-QoOqr60079.png-wh_50


右键站点,选择“域名浏览该网站”,就可以用域名浏览(在服务器上再进行域名解析就可以了)

如果不懂如何解析,可以看看我这篇文章:http://lccee.blog.51cto.com/10514884/1887604

wKiom1hvVQHRwZEAAAD_Z3HJ2g8229.png-wh_50




点击“域名浏览该网站”后,我们就可以看到这个页面,如下图所示。

wKiom1hvWGCTxjo8AAC1N91vnAU980.png-wh_50




鼠标拉动滚动条往下看,在这里点击查看更加详细的phpinfo()信息。

wKiom1hvWPii64YgAADx5Fa8RKg635.png-wh_50




可以看到在phpinfo文件页面,这里的Thread Safety显示的是enabled

Thread Safety是线程安全,而enabled是启动,那么说明目前是线程安全

wKioL1hvWTjSYqg5AABCPbOUSUQ820.png-wh_50



目前的PHP版本是php5.4,所以我们应该选择的两个DLL文件是

php_pdo_sqlsrv_54_ts.dll 和 php_sqlsrv_54_ts.dll,如下图

wKiom1izpm3Qv0-EAAI3cZkDNEI235.png




和前面一样把这两个DLL复制到对应PHP版本的ext文件夹里面。

wKioL1izpgfjyAOYAAGAglbFt1w591.png



这时候我们回到站点管理界面,右键站点打开与之对应的php.ini配文件。

wKiom1hvWpWzvVueAAEouhHS6yI206.png-wh_50



在打开的php.ini文件中

extension=php_sqlsrv_54_ts.dll

extension=php_pdo_sqlsrv_54_ts.dll

加入上面这两行,然后搜索mssql.secure_connection”这一段。

把“mssql.secure_connection = Off”改为“mssql.secure_connection = On

wKiom1hvWyuTX72XAABiFNAWByg538.png-wh_50




修改后保存,再次重启Apache服务,创建一个sqlsrv_connect.php文件,里面写上如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
 
$serverName  "NEPTUNE-PC" //serverName\instanceName
$connectionInfo  array "Database" => "lccee" "UID" => "sa" "PWD" => "111111" );
$conn  = sqlsrv_connect(  $serverName $connectionInfo );
  
if $conn  ) {
      echo  "连接成功<br />" ;
} else {
      echo  "连接失败<br />" ;
      
}
 
$query  = "select * from phpwamp" ;
$result  = sqlsrv_query( $conn $query );
while ( $row  = sqlsrv_fetch_array( $result )){
  
        print_r( $row );
        echo  "<br>" ;
}
 
?>



然后浏览sqlsrv_connect.php文件,就能读出数据库里面的信息了,如下图

wKiom1hvXaziQzPXAABalQ7zAak662.png-wh_50


其他PHP版本也是一样的道理,依样画葫芦即可,相关DLL在这文章的附件里面下载即可。

最新版PHPWAMP集成的php5.2、php5.3、php5.4、php5.5、php5.6、php7都已安装MSSQL数据库扩展。

phpinfo页面能搜到sqlsrv,但还是连不上数据库,可在附件下载ODBC驱动程序安装。



以后如果时间允许,我也会考虑制作一个Linux下的PHPWAMP,应网友的要求,Mac系统的也在考虑,不过对Mac系统不是特别了解,需要一定时间研究研究,最近工作也挺忙的,一个人时间有限,估计进度会很慢。

后期我会在PHPWAMP版本里配置好各版本PHP与MSSQL的连接,到时你们就不用自己配置了



运行环境上遇到任何问题都可以来我博客提问:http://lccee.blog.51cto.com/10514884/d-1


最后提示:文章中提到的DLL就在文章底部的“附件下载”那里,包含了所有PHP版本所需驱动。



相关文章推荐:

自定义设置任意PHP版本教程:http://lccee.blog.51cto.com/10514884/1886154

PHPWAMP在云服务器上的应用:http://lccee.blog.51cto.com/10514884/1887604

网页加密与网页乱码最详细的分析:http://lccee.blog.51cto.com/10514884/1886461

虚拟主机搭建网站的全程视频案例http://lccee.blog.51cto.com/10514884/1886460

强制修改所有mysql数据库密码:http://lccee.blog.51cto.com/10514884/1886402

强制去除域名端口号(独家功能):http://lccee.blog.51cto.com/10514884/1886424

----------------------------------------------------------------------------

PS无中生有技法,不借助素材:http://lccee.blog.51cto.com/10514884/1886454

在一节课里迅速掌握PS实用技能(职场必备):http://lccee.blog.51cto.com/10514884/1886456