首先說下個人環境,thinkphp版本3.1 php版本5.2.6 sqlserver2005 mysql版本5.2 php
最近作一個項目須要鏈接已有項目的sqlserver數據庫來獲得一些數據,咱們直接的數據庫是mysql 因此就須要切換數據庫鏈接。以前沒整過這個,如今查開發手冊,發現切換不一樣的mysql數據庫裏面介紹的挺簡單,實現起來也挺容易。可是配置連接mssql就有點問題了。因而乎在網上查各類資料,也是少的可憐,且大部分都是粘貼複製同一我的的,並且介紹的還不詳細。配置不成功。因而乎繼續查手冊,看看能不能發現點蛛絲馬跡。還真讓我發現了。廢話很少說,直接上代碼:配置文件裏面 mysql
//'配置項'=>'配置值'
'DB_TYPE' => 'mysql', // 數據庫類型
'DB_HOST' => 'localhost',// 服務器地址
'DB_NAME' => 'clinic' , // 數據庫名
'DB_USER' => 'root', // 用戶名
'DB_PWD' => '***', // 密碼
'DB_PORT' => 3306, // 端口
'DB_PREFIX' => '', // 數據庫表前綴
'DB_PREFIX' => '',
'DB_DEPLOY_TYPE' => 0, // 數據庫部署方式 0 集中式 1 分佈式 0
'DB_RW_SEPARATE' => FALSE, // 數據庫是否須要讀寫分離 分佈式部署下有效
'DB_MASTER_NUM' => 1, // 設置讀寫分離後 主服務器數量 1
//'DB_SLAVE_NO' => , // 設置讀寫分離後 指定從服務器序號(3.1新增)
'DB_SQL_BUILD_CACHE'=> FALSE, // 數據庫查詢的SQL建立緩存 FALSE
'DB_SQL_BUILD_QUEUE'=> 'file', // SQL緩存隊列的緩存方式 file
'DB_SQL_BUILD_LENGTH'=> 20, // SQL緩存的隊列長度 20
'DB_SQL_LOG' => FALSE, // 是否開啓SQL日誌記錄(3.1新增) FALSE
'DB_CONFIG2' => 'mssql://sa:sanyue@Admin/test'
c++
注意最下面一行代碼。對這個就是鏈接mssql語句的配置語句,sanyue爲數據庫密碼,@是個分隔符,Admin是我本機的名字,test是個人mssql數據庫
git
固然你要確保ThinkPHP\Lib\Think\Db\Driver下有DbMssql.class.php這個驅動,沒有的話去github上下一個,網上有的下載的有問題。
github
固然在配置前確定是要開啓mssql支持的,查看是否是支持就要看看phpinfo()函數輸出的有沒有mssql了,若是沒有就在配置文件中修改下,把下面兩行前面的」;「去掉。 sql
extension=php_mssql.dll thinkphp
extension=php_pdo_mssql.dll 數據庫
固然還要開啓mssql.allow_persistent = Off windows
將Off變成on 緩存
若是還不行,那就去下載去mssql官網下載,獲得的是一個自解壓的exe,運行解壓後會獲取好多dll,其中52表示5.2版本的php,53表示5.3版本的php,nt表示線程安全的,nts表示非線程安全的,vc六、vc9表示的是編譯這個dll所使用的vc++編譯器版本,基本上大多數時候,選vc6的;將本身php對應的擴展,好比個人是php_sqlsrv_52_nts_vc6.dll放到php安裝目錄ext文件夾下
而後修改php.ini在適當的地方加上一行:
extension=php_sqlsrv_52_nts_vc6.dll
固然這些以前你都要確保C盤windows文件夾裏面有ntwdblib.dll,php_mssql.dll這兩個dll,以上操做昨晚基本就應該能夠支持mssql了,這時只須要在thinkphp裏面新創建一個model類,好比個人
class AdvModel extends Model
{
public function querySQL($sql)
{
$result=$this->db(1,"DB_CONFIG2");
$result=$this->query($sql);
return $result;
}
}在控制器就能夠調用querySQl來獲取查詢結果
中文亂碼解決辦法是在DbMssql.class.php中修改getALL函數, $result[] = $row;賦值前先執行下邊的代碼
$ct=count($row);
foreach($row as $key=>$value)
{
$row[$key]=iconv('gbk','utf-8',$row[$key]);
}
$result[] = $row;