关于thinkPHP5+sqlserver配置

一、thinkphp连接SQLServer2008数据库配置
笔者使用的环境是Windows 2008 x64位系统,安装了IIS7.0,自己搭建了xampp,内含Apache2.4,PHP5.6.21,MySQL(10.1.13-MariaDB)。我只使用了IIS配合php,使用thinkphp5.0.6搭建的网站,原本使用的MySQL数据库,现在需要连接SQLServer2008读写一些数据。网上找了大量的资料并实践,现总结一下。

PHP连接MSSQL2008/2005数据库与以往的连接mssql2000是不一样的,连接mssql2008/2005是需要自己添加PHP对MSSQL连接的驱动扩展了,而我们常用的hp.ini中的extension=php_mssql.dll扩展只适用连接于MSSQL2000哦

下载一个SQL Server Driver for PHP
这是一个扩展包,我是在这里下载的 http://www.microsoft.com/en-us/download/details.aspx?id=20098 
根据你的php版本选择对应的安装包。由于我的PHP版本是5.6,所以我下载的是 
SQLSRV32.EXE, 运行后选择解压目录为 xampp/php/ext/ 
打开该目录,里面出现了

php_pdo_sqlsrv_52_nts.dll
php_pdo_sqlsrv_52_ts.dll
php_pdo_sqlsrv_53_nts_vc6.dll
php_pdo_sqlsrv_53_nts_vc9.dll
php_pdo_sqlsrv_53_ts_vc6.dll
php_pdo_sqlsrv_53_ts_vc9.dll
php_sqlsrv_52_nts.dll
php_sqlsrv_52_ts.dll
php_sqlsrv_53_nts_vc6.dll
php_sqlsrv_53_nts_vc9.dll
php_sqlsrv_53_ts_vc6.dll
php_sqlsrv_53_ts_vc9.dll
SQLServerDriverForPHP.chm(手册,英文够好可以看看)
SQLServerDriverForPHP_License.rtf
SQLServerDriverForPHP_Readme.htm(自述文件)
等等。。。

配置php.ini
(1)在php.ini中添加如下两条扩展:

extension=php_sqlsrv_56_ts.dll
extension=php_pdo_sqlsrv_56_ts.dll


(2)将;extension=php_pdo.dll前面的;去掉,开启pdo连接扩展··

(我怀疑这个dll是旧版本php需要配置的,我的5.6版本没有这个dll,我也没有添加这行配置,也配置成功了)

(3)重新启动apache或者IIS,我是直接结束掉了进程中的pgp-cgi.exe就实现了php配置刷新。 
备注:不要用***_nts.dll的文件,这样就会失败

extension=php_sqlsrv_56_nts.dll
extension=php_pdo_sqlsrv_56_nts.dll

(4)这时候你在phpinfo()中的PDO配置中会看见已经存在sqlsrv了。

这里如果使用的php版本是64位的话,官网的 php_sqlsrv_xx_ts.dll和 php_pdo_sqlsrv_xx.tl.dll 不起作用,网友收集了对应的64位版本dll,请到 
http://pan.baidu.com/s/1kUCP7EJ 
下载选择对应版本即可。

下载安装一个Microsoft® ODBC Driver 11 for SQL Server
https://www.microsoft.com/download/details.aspx?id=36434 
我不知道选择语言有什么用处。反正我安装的是简体中文。

 

二、配置你的database.php文件 (下面是我的配置,没有贴出来的都是一样的)

  1.     // 数据库类型
  2.     'type'            => 'sqlsrv',
  3.     // 服务器地址
  4.     'hostname'        => '127.0.0.1',   
  5.     // 数据库名
  6.     'database'        => 'QPTreasureDB',
  7.     // 用户名
  8.     'username'        => '你的用户名',
  9.     // 密码
  10.     'password'        => '你的密码',
  11.    // 端口 
  12.    'hostport'        => '1433',   

 

 

4、配置好之后就可以使用了(数据库操作与mysql的数据库操作是一样的),但是这里有一个坑,SQLServer数据库大写是可以用的,但是用tp5数据库的方法时,大写会被自动转化为下划线+小写字母(比如 MyName 会被转化为 My_name),这里我百度了,还没有找到合适的方法解决,暂时使用原生查询(query 和 execute)来写的。


==================== SQLServer多库切换(这个是在博客上看到的,亲试有用,分享给大家) ===========================

1、首先要连接上你的SQLServer;

2、将你配置好的database.php 文件复制一份,命名为 database2.php,并写入第二个数据库的配置;

3、在你的config.php文件中先引入 database2.php 文件(代码: $db_con2 = require_once('database2.php'); ),并在最后加上 'db_con2' => $db_con2, 

4、控制器里面就可以使用了
如:
$db = Db::connect('db_con2');
$db->query('select * from user');

 

三、.测试PHP7与sqlserver数据库的连通性(不使用框架)

  1. <meta charset="utf-8">
  2. <?php  
  3. $serverName = "localhost"; //数据库服务器地址
  4. $uid = "请修改!!!!!!!";     //数据库用户名
  5. $pwd = "请修改!!!!!!!"; //数据库密码
  6. $connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>"请修改!!!!!!!");
  7. $conn = sqlsrv_connect($serverName, $connectionInfo);
  8. if( $conn == false)
  9. {
  10.     echo "failed";
  11.     var_dump(sqlsrv_errors());
  12.     exit;
  13. }else{
  14.     echo "ok";
  15. }

复制代码

 

===============3.修改tp5配置
application/database.php;尤其注意以下两点:

  1.     // 数据库类型
  2.     'type'            => 'sqlsrv',
  3.     // 数据库编码默认采用utf8
  4.     'charset'         => 'GBK',(我的是GBK,于是写的四GBK)

复制代码

 

===============4.测试数据库读取
application/index/controller/index.php

  1. <?php
  2. namespace app\index\controller;
  3. use think\Db;
  4.  
  5. class Index
  6. {
  7.     public function index()
  8.     {
  9.     $result=Db::query('select * from 请修改!!! where id=请修改!!!');
  10.       dump($result);
  11. }
  12. }

复制代码

 

访问xxx/public,出现结果,说明访问成功!
===============5.令人惊叹的tp5! 
sqlserver本身不支持limit函数!!!tp5实现了!!解决了我的心头大患啊!!!底层是PDO还是tp自己实现的不过问了,只想给tp点赞!

  1.     $result=Db::name('st')->order('id','asc')->limit(10,5)->select();
  2.         dump($result);

复制代码

 

===============6.给大家看看我的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值