1. 程式人生 > >docker php連線sql server2000

docker php連線sql server2000

  最近接了個專案,需要連線遠端的sqlserver 2000.當時的伺服器環境是ubuntu14,php7。但是在自己安裝好相應的拓展後,網頁卻提示:ODBC Driver 13 for SQL Server does not support connections to SQL Server 2000 or earlier versions,然後在另一臺伺服器上安裝 ODBC Driver 11 的ODBC源時,也提示不支援sql server 2000的資料庫。

 當時有二個方案,一是使用php5.2版本自帶的mssql拓展來連線mssql資料庫,寫好相應的介面給專案使用

第一步. docker的初步學習

這塊可以在菜鳥教程學習。

第二步:選擇相應的docker映象

1)pull 映象

docker pull ppoffice/apache-php-mssql-odbc

2)執行映象

docker run -d -p 8000:80 -v /var/www/tp5:/var/www/tp5  ppoffice/apache-php-mssql-odbc

   -p  8000:80  指的是宿主機8000埠對映到docker內80埠,宿主機的專案檔案對映到docker內的對應檔案

  注意伺服器的8000埠需要在雲服務商(如阿里雲處)控制檯開啟。

3)進入映象

 檢視執行docker的映象

docker ps -a 

找到相應的docker id

 docker exec -it 112cfa214ed0  /bin/bash

根據docker id進入docker   下面是進入docker了

4)進入apache的配置檔案,檢視專案的根目錄

vim需要自己安裝:apt-get update;      apt-get install vim 

  $db = new PDO ("dblib:host=伺服器地址;dbname=資料表名", "使用者名稱", "密碼");

  $sql    =  "select top 10 *  from  [dbo].[倉庫]";
  $res = $db->query($sql);
      foreach ($res as $k =>$v)
  {
      var_dump($v);
  }
die();

但在這過程中遇到個問題,當sql server2000 的資料表名為英文時,pdo能查詢到資料,但當資料表名為中文時,像上面的 ‘倉庫’,$res 返回的資料及時空的。後來經過幾個小時的百度,實驗,測試。原來是需要將sql轉下格式

改為:

  $db = new PDO ("dblib:host=伺服器地址;dbname=資料表名", "使用者名稱", "密碼");

  $sql    =  "select top 10 *  from  [dbo].[倉庫]";
  $sql    =  $this->utf8togb($sql);
  $res = $db->query($sql);
      foreach ($res as $k =>$v)
  {
      var_dump($v);
  }
die();
    //編碼轉換函式
    public function utf8togb($s)
    {
        return iconv('utf-8', 'gbk//IGNORE', $s); // IGNORE 引數是遇到不成轉換的字元時忽略
    }

便可以啦