一、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文件 (下面是我的配置,没有贴出来的都是一样的)
// 数据库类型
'type' => 'sqlsrv',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'QPTreasureDB',
// 用户名
'username' => '你的用户名',
// 密码
'password' => '你的密码',
// 端口
'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数据库的连通性(不使用框架)
<meta charset="utf-8">
<?php
$serverName = "localhost"; //数据库服务器地址
$uid = "请修改!!!!!!!"; //数据库用户名
$pwd = "请修改!!!!!!!"; //数据库密码
$connectionInfo = array("UID"=>$uid, "PWD"=>$pwd, "Database"=>"请修改!!!!!!!");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if( $conn == false)
{
echo "failed";
var_dump(sqlsrv_errors());
exit;
}else{
echo "ok";
}
复制代码
===============3.修改tp5配置
application/database.php;尤其注意以下两点:
// 数据库类型
'type' => 'sqlsrv',
// 数据库编码默认采用utf8
'charset' => 'GBK',(我的是GBK,于是写的四GBK)
复制代码
===============4.测试数据库读取
application/index/controller/index.php
<?php
namespace app\index\controller;
use think\Db;
class Index
{
public function index()
{
$result=Db::query('select * from 请修改!!! where id=请修改!!!');
dump($result);
}
}
复制代码
访问xxx/public,出现结果,说明访问成功!
===============5.令人惊叹的tp5!
sqlserver本身不支持limit函数!!!tp5实现了!!解决了我的心头大患啊!!!底层是PDO还是tp自己实现的不过问了,只想给tp点赞!
$result=Db::name('st')->order('id','asc')->limit(10,5)->select();
dump($result);
复制代码
===============6.给大家看看我的结果