今天碰到客戶要求將之前用 EXCEL 檔案匯入 MySQL 資料庫方式改成連接 MSSQL 資料庫做成每日自動更新,結果發現伺服器沒安裝 MSSQL ODBC Driver,無法連線。本以為很麻煩,後來發現其實很簡單。

安裝步驟 (參考 微軟的文件 )

由於伺服器採用 CentOS 8 參考 Red Hat Enterprise Server 與 Oracle Linux 章節,抓取對應 CentOS 8 的 repo 檔案。

curl https://packages.microsoft.com/config/rhel/8/prod.repo > /etc/yum.repos.d/mssql-release.repo

先移除舊的 unixODBC 避免衝突,即使後面安裝的版本相同也先移除掉。

yum remove unixODBC

安裝 msodbc17,安裝之前建議執行 yum update 將系統套件保持最新狀態。

ACCEPT_EULA=Y apt-get install msodbcsql17

安裝 php-sqlsrv

yum install -y php-sqlsrv

確認是否安裝 php-sqlsrv 成功

php -m | grep sqlsrv

注意事項

安裝完後發現, /etc/odbcinst.ini 這個檔案裡面新增了一組資料,但之前曾經安裝mdb 的 Driver 竟然不見了,請記得要補回來。

[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.6.so.1.1
UsageCount=1

# Driver for mdb access file
[MyMDBDriver]
Description     = MDBTools MDB ODBC Driver
Driver          = /usr/lib/libmdbodbc.so
Setup           = /usr/lib/libmdbodbc.so
Driver64        = /usr/lib64/libmdbodbc.so
Setup64         = /usr/lib64/libmdbodbc.so
FileUsage       = 1
UsageCount      = 1

使用 PHP PDO 連接

    //設定
    $dbhost = 'localhost';
    $dbuser = 'username';
    $dbpasswd = 'password';
    $dbname = 'dbname';
    $dsn = "sqlsrv:Server=$dbhost;Database=$dbname";

    try
    {
        $conn = new PDO($dsn,$dbuser,$dbpasswd);
        $conn->exec("SET CHARACTER SET utf8");
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "連線成功<br>";

        //讀取 MSSQL View表
        $sql = "SELECT * FROM [主table].[db_accessadmin].[view表名稱]";
        $sth = $conn->prepare($sql);
        $sth->execute();
        $data = $sth->fetchAll();
        //var_dump($data);
    }
    catch(PDOException $e)
    {
        echo "連線失敗: ".$e->getMessage();
    }

最後修改日期: 2020 年 9 月 24 日