一、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.給大家看看我的結果