Windows上のSQLServerに、Linuxサーバー上のPHPプログラムから接続する手順。
Microsoftがドライバーを提供していて、以下のチュートリアルを参考に作業。
今回のLinuxサーバーはCentOS Stream 9なので、Red Hatの部分を参考に進める。
1)ODBCドライバー
1-1)Linux用ODBCドライバー
レポを更新して
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を定義。
1-4)接続確認
sqlcmdで接続確認。暗号化を有効にしているので、証明書エラーになるのでCオプションを指定する。
/opt/mssql-tools18/bin/sqlcmd -D -C -S (DSN名) -U (ユーザー名) -P (パスワード)
2)PHPからの接続
PHP用のドライバーについては、以下ページ。
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の設定
起動時にドライバーを読み込ませる。
/etc/php.d に、以下内容で30-sqlsrv.iniを作成。
extension=sqlsrv.so
2-3)接続確認
サンプルプログラムを修正して、ブラウザから確認する。
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