DX推進をサポートする情報サイト

 お問い合わせ 
プロフィール
技術者向け技術情報
TOP >技術者向け技術情報

【Linux】LamppのMSSQLへの接続

2022-08-24
 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ファイルを /opt/lampp/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でないと認識しません。