今天碰到客戶要求將之前用 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();
}