LinuxのPHPからWindowsのSQLServerに接続

Windows上のSQLServerに、Linuxサーバー上のPHPプログラムから接続する手順。

Microsoftがドライバーを提供していて、以下のチュートリアルを参考に作業。

https://learn.microsoft.com/ja-jp/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver16

今回のLinuxサーバーはCentOS Stream 9なので、Red Hatの部分を参考に進める。

1)ODBCドライバー

1-1)Linux用ODBCドライバー

https://learn.microsoft.com/ja-jp/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15&tabs=redhat18-install%2Calpine17-install%2Cdebian8-install%2Credhat7-13-install%2Crhel7-offline

レポを更新して

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

必要なものをインストールする。

sudo dnf install msodbcsql18
sudo dnf install mssql-tools18
sudo dnf install unixODBC-devel

1-2)WindowsServer側で接続許可

Windows側で、SQLServerのTCP/IP接続設定と、ファイアーウォールでLinuxサーバーからの接続許可をする。

1-3)ODBC設定

/etc/odbc.iniを編集して、DSNを定義。

https://learn.microsoft.com/ja-jp/sql/connect/odbc/linux-mac/connection-string-keywords-and-data-source-names-dsns?source=recommendations&view=sql-server-ver16

1-4)接続確認

sqlcmdで接続確認。暗号化を有効にしているので、証明書エラーになるのでCオプションを指定する。

/opt/mssql-tools18/bin/sqlcmd -D -C -S (DSN名) -U (ユーザー名) -P  (パスワード)

2)PHPからの接続

PHP用のドライバーについては、以下ページ。

https://learn.microsoft.com/ja-jp/sql/connect/php/overview-of-the-php-sql-driver?view=sql-server-ver16

SQLSRV ドライバーと PDO_SQLSRV ドライバーがあるが、今回はSQLSRV ドライバーを使うこととした。

2-1)SQLSRV ドライバーのインストール

以下コマンドでインストール。

sudo pecl install sqlsrv

ConoHaのVPSのCentOS Stream 9では、足りないものがありmakeエラーとなる。

(エラー)
/bin/ld: cannot find -lltdl
collect2: error: ld returned 1 exit status
make: *** [Makefile:238: sqlsrv.la] Error 1
ERROR: `make' failed

libtool-ltdl-develが足りていないよう。

sudo dnf install libtool-ltdl-devel

ところが、見つからないと出る。どうやら、repoの設定が無効になっているようで、/etc/yum.repos.d/centos.repoを修正して、crbを有効にすることで解決。

:
[crb]
:
enabled=1     ※ここを0から1に変更
  
[crb-debuginfo]
:

2-2)PHPの設定

起動時にドライバーを読み込ませる。

https://learn.microsoft.com/ja-jp/sql/connect/php/loading-the-php-sql-driver?view=sql-server-ver16#loading-the-driver-at-php-startup

/etc/php.d に、以下内容で30-sqlsrv.iniを作成。

extension=sqlsrv.so

2-3)接続確認

サンプルプログラムを修正して、ブラウザから確認する。

https://learn.microsoft.com/ja-jp/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver16#sqlsrv-example

SQLSRV ドライバーのAPIについては、以下ページ。

(APIリファレンス)

https://learn.microsoft.com/ja-jp/sql/connect/php/sqlsrv-driver-api-reference?view=sql-server-ver16

自己証明書を利用しているので、接続オプションにTrustServerCertificateを追加した。

<?php
$serverName = "myServer,9999";  # 9999:PortNo
$connectionOptions = array(
    "TrustServerCertificate" => "yes", # 自己証明書を信頼
    "database" => "myDatabase",
    "uid" => "myUser",
    "pwd" => "myPassword"
);
:

接続オプションについての詳細は以下ページ。

(接続オプション)

https://learn.microsoft.com/ja-jp/sql/connect/php/connection-options?view=sql-server-ver16