PHP、MySQLを使っていくといろんなデータと連携が必要となってきます。
このページでは、Linux上で構築されたLamppからのMSSQLへの接続をご紹介します。
<構築の流れ>
1)linuxの各種ライブラリーのインストール
2)MSSQL接続ライブラリーとダウンロードと配置
3)php.iniの設定
4)その他設定
1)linuxの各種ライブラリーのインストール
参考資料:https://docs.microsoft.com/ja-jp/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-ver16
※Red Hat へのインストールの PHP7.4を参照し抜粋
<手順>
# yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
subscription-manager repos --enable=rhel-7-server-optional-rpms
# yum install yum-utils
# yum install php php-pdo php-pear php-devel
# pecl install sqlsrv
# pecl install pdo_sqlsrv
# echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini
# echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini
2)MSSQL接続ライブラリーとダウンロードと配置
参考資料:https://docs.microsoft.com/ja-jp/sql/connect/php/download-drivers-php-sql-server?view=sql-server-ver16
下記サイトよりPHP接続のライブラリーをダウンロードしファイルを配置して下さい。
GitHub リリース タグ v5.10.1 (こちらから Linux と macOS のパッケージが入手できます)
※こちらもMicroSoft社より無償提供されています。
ご利用されているOSおよびそのバージョン、PHPのバージョンに合わせドライバーをダウンロードください。
<soファイル>
php_sqlsrv_74_nts_x64.so
php_pdo_sqlsrv_74_nts_x64.so
この2つのsoファイルを /usr/lib64/php/modules/ へ配置します。
ディレクトリーは新たに作成下さい。
※他にsoのライブラリーを利用されている場合はそのライブラリーがあるディレクトリーへ配置下さい。
新たに配置させるディレクトリーを作成した場合は、php.iniに配置先の記載が必要です。
3)php.iniの設定
下記をphp.iniに記述を追記します。
・ライブラリー配置先の記述
815行目ぐらいで
extension_dir = "/usr/lib64/php/modules"
・ライブライリーの有効化
1030行目ぐらいで
extension=php_sqlsrv_74_nts_x86.so
extension=php_pdo_sqlsrv_74_nts_x86.so
・Lamppを再起動し設定を反映させます。
4)その他設定
・firewalld:必要に応じて設定 例)80、443、3306(mssql)、1433(MSSQL)
変更時は、# firewall-cmd --reload を忘れずに。
・Lampp利用するためのphp.iniを状況に合わせ設定下さい。
・Lamppを再起動し設定を反映させます。
5)接続プログラムについて
そのままphpプログラムを起動してもエラーが出ます。
エラーを回避するためにsqlsrv_connectのパラメータを下記のようにする必要があります。
$user = 'aaaaa';
$pass = 'bbbbb';
$dbname = 'ccccc';
$server = '192.168.**.**';
$connInfo = array( "UID"=>"$user", "PWD"=>"$pass", "Database"=>"$dbName","TrustServerCertificate"=>'true');
$conn_euc = sqlsrv_connect($server, $connInfo);
<ポイント>
・"TrustServerCertificate"=>'true'の記述は必須
・作成したPGの文字コードは utf-8 で保存します
日本語のテーブル名やカラム名の場合utf-8でないとSQLサーバが認識しません。
余談ですが、Windowsのphpから接続する場合はsjisでないと認識しません。