LoginSignup
0
1

More than 3 years have passed since last update.

Ubuntu 20.04 の PHP 7.4 から MS SQLServer に接続する

Posted at

環境

  • Ubuntu 20.04.1 LTS (Focal Fossa)
  • PHP 7.4.10

Microsoft のドキュメント

インストールの流れ

先にODBCドライバをインストールした後、PHP側のpeclでドライバをインストールする。
ODBCドライバがない状態では、peclでのインストール時にビルドに失敗する。

ODBCドライバのインストール

マニュアルから

sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql17
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install unixodbc-dev

問題発生

マニュアルではoptionalになっているが、PHPのドライバをビルドするにはunixodbc-devが必要。
しかし、素直にインストールしようとすると失敗する。

エラー
以下のパッケージには満たせない依存関係があります:
 unixodbc-dev : 依存: unixodbc (= 2.3.7)
                依存: odbcinst1debian2 (= 2.3.7) しかし、インストールされようとしていません
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

apt listしてみると

$ apt list unixodbc*
一覧表示... 完了
unixodbc-dev/bionic,focal 2.3.7 amd64
unixodbc-dev/focal 2.3.6-0.1build1 i386
unixodbc/bionic,focal 2.3.7 amd64
unixodbc/focal 2.3.6-0.1build1 i386
$ apt list odbcinst1debian2
一覧表示... 完了
odbcinst1debian2/bionic 2.3.7 amd64
odbcinst1debian2/focal 2.3.6-0.1build1 i386

amd64版はfocal向けのバージョンが合っていない。

解決策

同じバージョンで指定して、同時にインストールする。

sudo apt install unixodbc-dev=2.3.6-0.1build1 libodbc1=2.3.6-0.1build1 odbcinst1debian2=2.3.6-0.1build1

失敗する方法

  • i386版ならバージョンが合っているのでunixodbc-dev:i386をインストール ⇒ 後に続くpecl install sqlsrvに失敗する。
  • unixodbc-dev=2.3.6-0.1build1をインストール ⇒ 依存関係をインストールしてくれない。

PHP用のドライバインストール

上記の方法でunixodbc-devのインストールに成功していれば、マニュアル通りに問題なくインストールできる。

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
printf "; priority=20\nextension=sqlsrv.so\n" > /etc/php/7.4/mods-available/sqlsrv.ini
printf "; priority=30\nextension=pdo_sqlsrv.so\n" > /etc/php/7.4/mods-available/pdo_sqlsrv.ini
exit
sudo phpenmod -v 7.4 sqlsrv pdo_sqlsrv```
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1