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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章