Microsoft Drivers for PHP for SQL Server のシステム要件

PHP ドライバーのダウンロード

この記事では、SQLSRVまたはPDO_SQLSRVドライバを使ってSQL ServerまたはAzure SQL Databaseのデータにアクセスするためにシステムにインストールしなければならないコンポーネントを一覧にしています。

PHPドライバーのサポートライフサイクルや要件の詳細については、 サポートマトリックスをご覧ください。 各リリースのSQLSRVおよびPDO_SQLSRVドライバは、同じPHP、オペレーティングシステム、アーキテクチャ、スレッドセーフティ、ODBC要件を持っています。

ドライバースタックがどのように連携するか

PHPアプリケーションはデータベースサーバーに直接接続しません。 各層は隣接する層と互換性がある必要があります:

レイヤー 選択・設定するもの ミスマッチとはどのようなものか
Application SQLSRV関数やPDO_SQLSRVクラスや属性 未定義の関数、利用できないPDOドライバ、またはアプリケーションレベルのエラー
PHP拡張 PHPマイナーバージョン、アーキテクチャ、スレッドセーフティモード向けに構築されたSQLSRVおよびPDO_SQLSRVファイル PHPの起動警告、モジュールロード失敗、またはプロセスクラッシュ
PHPランタイム コマンドラインインターフェース(CLI)、Apacheモジュール、PHP-FPM、またはIIS FastCGI構成 CLIはドライバーを読み込みますが、ウェブアプリケーションはドライバーを読み込みません
Microsoft ODBC ドライバー 選択したPHPドライバリリースでサポートされているバージョン 接続障害やODBCライブラリの欠如
オペレーティング システム 必要なランタイムおよびビルドパッケージを備えたサポートされたリリースとアーキテクチャ 互換性のあるパッケージ、未解決の共有ライブラリ、またはソースビルドの失敗はありません
データベース製品 サポートされている SQL Server または Azure SQL のターゲット 接続確立後のサーバーバージョンまたは機能固有のエラー

SQLSRVとPDO_SQLSRVは同じODBCドライバー上で異なるPHP APIを提供します。 アプリケーションが両方のAPIを使う場合は、両方をインストールしてください。 一方の拡張機能をインストールしても、もう一方が自動的にインストールまたは有効になるわけではありません。

API プログラミング モデル インストール固有のチェック
SQLSRV 手続き型 sqlsrv_* 関数とSQLSRV定数 extension_loaded('sqlsrv') と function_exists('sqlsrv_connect')
PDO_SQLSRV PHPデータオブジェクト(PDO)クラス、属性、例外 extension_loaded('pdo_sqlsrv') と sqlsrv が PDO::getAvailableDrivers() で

拡張機能は個別にインストールできます。 PDO_SQLSRVも、PDO_SQLSRVの前にPDOを読み込む必要があります。

互換性のあるセットを選ぶ

ドライバーをダウンロードまたはビルドする前に、以下のチェックを完了してください:

  1. アプリケーションを実行しているすべてのPHPランタイムを特定しましょう。 スケジュールされたタスク、コマンドラインワーカー、IISサイト、Apacheモジュール、PHP-FPM プールは異なるPHP実行ファイルや設定ファイルを使用できます。

  2. 各PHP実行ファイルに対して以下のコマンドを実行します:

    php -i | findstr /I "PHP Version Architecture Thread Safety extension_dir"
    

    LinuxやmacOSでは、以下をご利用ください:

    php -i | grep -E "PHP Version|Thread Safety|extension_dir"
    file "$(php -r 'echo PHP_BINARY;')"
    

    fileコマンドは実行ファイルのアーキテクチャを報告します。 もしユニバーサルmacOS実行ファイルとして表示される場合は、arch -arm64 php --version や arch -x86_64 php --version など意図するアーキテクチャを明示的に選択してください。 拡張の構築、読み込み、テストの際には同じアーキテクチャ選択をしてください。

  3. PHPマイナーバージョン、オペレーティングシステム、データベースターゲットをサポートするPHPドライバーのリリースを選択します。

  4. この記事の互換性表からサポートされているMicrosoft ODBCドライバーのバージョンを選択します。

  5. 拡張ファイルやPIEビルドをPHPアーキテクチャとスレッドセーフティモードに合わせます。 すべての値が一致しない限り、他のPHPインストールから拡張をコピーしないでください。

  6. CLIとウェブサーバーのランタイムは別々に設定・検証してください。 php -mコマンドが成功した場合、CLIランタイムが拡張を読み込んだことだけが証明されます。

PHP

PHPのウェブサイトからPHPバイナリをダウンロードしてください。 PHPのバージョンサポートに記載されているPHPバージョンを選択してください。

  • PHPバージョンに合ったドライバーファイルを有効にしてください。 ファイル名については、 ドライバーのバージョンを参照してください。 ファイルはMicrosoft Drivers for PHP for SQL Serverからダウンロードしてください。 設定手順については、「Microsoft Drivers for PHP for SQL Server の Load」を参照してください。

  • PHPおよび使用するアプリケーションフレームワークでサポートされているウェブサーバーとPHP統合方法を選びましょう。 PHPのインストールドキュメントとフレームワークのデプロイ指示に従って、ウェブサーバーをPHPを実行するように設定してください。 拡張の読み込みはCLIとは別にウェブサーバーランタイムで検証してください。

スレッド安全性とアーキテクチャ

PHP のビルドと拡張ファイルは、両方の値が一致している必要があります。

PHP値 必要なドライバーの選択
Thread Safety => enabled スレッド安全(ts または TS)ドライバーファイル
Thread Safety => disabled 非スレッドセーフ(nts または NTS)ドライバーファイル
Architecture => x64 64ビットドライバーファイルおよび64ビットODBCコンポーネント
Architecture => x86 32ビットWindowsドライバファイルと32ビットODBCコンポーネント

CLIはスレッドセーフまたは非スレッドセーフのPHPビルドのいずれかを使用できます。 すべてのCLIビルドが非スレッドセーフであると仮定せず、報告された値を基準に拡張を選択してください。

ODBC ドライバ

PHPを実行するコンピュータに対応可能なMicrosoft ODBCドライバー for SQL Serverをインストールしてください。 SQL Server 用 ODBC Driver のダウンロードからドライバーをダウンロードしてください。

64 ビット版の Windows にドライバーの Windows バージョンをダウンロードする場合は、ODBC 64 ビット インストーラーによって、32 ビットと 64 ビットの ODBC ドライバーの両方がインストールされます。 Windows の 32 ビット版を使用する場合は、ODBC x86 インストーラーを使用します。 Windows 以外のプラットフォームでは、64 ビット版のドライバーのみを使用できます。

この表にはアップグレード計画のための過去の組み合わせが含まれています。 新しいインストールには現在のPHPドライバリリースと記載されているODBCバージョンを使用してください。 古いリリースとの互換性は、そのリリースのサポート ライフサイクルを延長しません。 PHPドライバーのサポートライフサイクルとサポートされているPHPバージョンの両方を確認してください。

空セルがあっても、PHPドライバーが必ずしもそのODBCバージョンを拒否するわけではありません。 個々の機能では、ベースの組み合わせよりも新しいODBCバージョンが必要になることがあります。

PHP ドライバー バージョン →
↓ ODBC ドライバーのバージョン
5.13 5.12 5.11 5.10 5.9 5.8 5.6 5.3 5.2 4.3 4.0 3.2
ODBC ドライバー 18 はい はい はい はい
ODBC ドライバー 17 はい はい はい はい はい はい はい はい はい
ODBC ドライバー 13.1 はい はい はい はい はい はい はい はい はい はい
ODBC ドライバー 13 はい
ODBC ドライバー 11 はい はい はい はい はい はい はい

SQLSRV ドライバーを使用している場合、Microsoft Drivers for PHP for SQL Server によって使用されている SQL Server Microsoft ODBC Driver for SQL Server のバージョンに関する情報が sqlsrv_client_info によって返されます。 PDO_SQLSRV ドライバーを使用している場合、PDO::getAttribute を使用して、バージョンを確認できます。

SQL Server

サポートされているSQL Serverのバージョンについては、「サポートされているデータベース バージョン」を参照してください。

SQL Server、Azure SQL Database、Azure SQL Managed Instance、Azure Synapse Analytics、Microsoft FabricのSQL Database、Microsoft FabricのWarehouseのターゲットサポートを別々に評価してください。 インストール要件はクライアント側の要件であり、すべての認証方法、接続オプション、Transact-SQL (T-SQL) 機能、またはデータ型がすべてのターゲットで利用可能であることを意味するものではありません。 アプリケーションが使うシナリオに応じて、サポートマトリックスとターゲット製品のドキュメントを活用してください。

オペレーティング システム

サポートされているオペレーティングシステムについては、「サポートされているオペレーティングシステム」を参照してください。

ドライバー バージョン

Microsoft Drivers for PHP for SQL Serverの各リリースには、スレッドセーフおよび非スレッドセーフのSQLSRVおよびPDO_SQLSRVドライバーファイルが付属しています。 Windowsでは、各バリアントは32ビットおよび64ビットPHP向けにも構築されています。 ドライバーファイルをPHPのバージョン、スレッドセーフティモード、アーキテクチャに合わせて照合してください。 ドライバーファイルをダウンロード後に有効化するには、「PHP 用 Microsoft Drivers for SQL Server の読み込み」を参照してください。

LinuxおよびmacOSでは、 LinuxおよびmacOSのインストール手順に従って、拡張用PHPインストーラーであるPIE(PIE)でドライバーをインストールしてください。 PIEは、廃止された PHP拡張コミュニティライブラリ(PECL) パッケージシステムを置き換え、インストールされる拡張機能名は sqlsrv.so または pdo_sqlsrv.so になります。 以下の表は、Microsoft Drivers for PHP for SQL Server releasesのページから手動でダウンロードする既成バイナリパッケージのファイル名を示しています。

以下の表は5.13リリースパッケージ内のファイルを示しています。 ファイル名において、 ts と TS はスレッド安全、 nts と NTS は非スレッドセーフを意味します。

Windowsドライバーファイル

Windows_5.13.xRTW.zipパッケージにはこれらのファイルが含まれています。

SQLSRVファイル PDO_SQLSRVファイル PHP バージョン スレッド セーフですか。 Architecture
php_sqlsrv_83_nts_x86.dll php_pdo_sqlsrv_83_nts_x86.dll 8.3 いいえ 32-bit
php_sqlsrv_83_ts_x86.dll php_pdo_sqlsrv_83_ts_x86.dll 8.3 はい 32-bit
php_sqlsrv_83_nts_x64.dll php_pdo_sqlsrv_83_nts_x64.dll 8.3 いいえ 64-bit
php_sqlsrv_83_ts_x64.dll php_pdo_sqlsrv_83_ts_x64.dll 8.3 はい 64-bit
php_sqlsrv_84_nts_x86.dll php_pdo_sqlsrv_84_nts_x86.dll 8.4 いいえ 32-bit
php_sqlsrv_84_ts_x86.dll php_pdo_sqlsrv_84_ts_x86.dll 8.4 はい 32-bit
php_sqlsrv_84_nts_x64.dll php_pdo_sqlsrv_84_nts_x64.dll 8.4 いいえ 64-bit
php_sqlsrv_84_ts_x64.dll php_pdo_sqlsrv_84_ts_x64.dll 8.4 はい 64-bit
php_sqlsrv_85_nts_x86.dll php_pdo_sqlsrv_85_nts_x86.dll 8.5 いいえ 32-bit
php_sqlsrv_85_ts_x86.dll php_pdo_sqlsrv_85_ts_x86.dll 8.5 はい 32-bit
php_sqlsrv_85_nts_x64.dll php_pdo_sqlsrv_85_nts_x64.dll 8.5 いいえ 64-bit
php_sqlsrv_85_ts_x64.dll php_pdo_sqlsrv_85_ts_x64.dll 8.5 はい 64-bit

非スレッドセーフなドライバーファイルを非スレッドセーフなPHPビルドで使用し、スレッドセーフなドライバーファイルをスレッドセーフなPHPビルドで使用します。 コマンドラインインターフェース(CLI)はどちらのビルドでも使用できます。 どのビルドか確認するには、 php -i を実行して Thread Safety の値を確認してください。

LinuxおよびmacOSのドライバーファイル

Linux_5.13.xRTW.tar.gzパッケージとMac_5.13.xRTW.tar.gzパッケージにはこれらのファイルが含まれています。 Linuxアーカイブにはx64バイナリが含まれており、macOSアーカイブにはArm64バイナリが含まれています。

ビルド済みファイルもOSのネイティブライブラリと一致しなければなりません。 Linux 5.13.3のバイナリはglibc 2.38以降のバージョンと、 GLIBCXX_3.4.32を提供するC++ランタイムを必要とします。 macOS 5.13.3バイナリは、macOS 26を最小展開目標として宣言しています。 これらのバイナリ要件は、ソースビルドのオペレーティングシステムサポートとは別です。

アーカイブのアーキテクチャやネイティブライブラリの要件がPHPインストールと一致しない場合はPIEを使いましょう。 PIE は、インストールされた PHP およびネイティブライブラリ向けにビルドされます。 システムライブラリを手動で置き換えてプリビルドの拡張機能を読み込むのはやめましょう。

SQLSRVファイル PDO_SQLSRVファイル PHP バージョン スレッド セーフですか。
SQLSRV_8.3_NTS.so PDO_SQLSRV_8.3_NTS.so 8.3 いいえ
SQLSRV_8.3_TS.so PDO_SQLSRV_8.3_TS.so 8.3 はい
SQLSRV_8.4_NTS.so PDO_SQLSRV_8.4_NTS.so 8.4 いいえ
SQLSRV_8.4_TS.so PDO_SQLSRV_8.4_TS.so 8.4 はい
SQLSRV_8.5_NTS.so PDO_SQLSRV_8.5_NTS.so 8.5 いいえ
SQLSRV_8.5_TS.so PDO_SQLSRV_8.5_TS.so 8.5 はい

必要な各ファイルをPHP拡張ディレクトリにコピーしてください。 パッケージのファイル名をそのままにして extension=SQLSRV_8.4_NTS.soを書くか、ファイルを sqlsrv.so に改名して短縮形の extension=sqlsrvを書くこともできます。 同じ命名をPDO_SQLSRVにも適用してください。 拡張機能ディレクトリを確認するには、php -i | grep extension_dir を実行します。 Linux と macOS でドライバーを読み込む に従って、正しい構成ファイルで拡張機能を有効にし、PDO_SQLSRV より前に PHP Data Objects (PDO) を読み込みます。

以前のリリース

5.13以前のリリースに含まれるドライバーファイルについては、Microsoft Drivers for PHP for SQL Server releasesページからそのリリースのパッケージをダウンロードし、その内容を一覧表示してください。 5.12以前のリリースでは、プラットフォームごとに単一のパッケージを公開するのではなく、各オペレーティングシステムとPHPバージョンごとに別々のパッケージを公開します。

選択した環境を検証してください

PHP拡張機能とODBCドライバーをインストールした後、ウェブサーバーの設定前に以下のチェックを実行してください:

php --version
php --ini
php --ri sqlsrv
php --ri pdo_sqlsrv

最後の2つのコマンドは別々のモジュール情報セクションを表示する必要があります。 どちらかのコマンドで拡張機能が存在しないと報告された場合は、プラットフォームのインストールとロード手順を終えてからデータベース接続のテストをしてください。

認証情報を必要とせずに両方のPHP APIをチェックできる verify-php-drivers.php を作成して:

<?php
$failures = [];

if (!extension_loaded('sqlsrv') || !function_exists('sqlsrv_connect')) {
    $failures[] = 'SQLSRV is not loaded.';
}

if (!extension_loaded('pdo_sqlsrv') || !in_array('sqlsrv', PDO::getAvailableDrivers(), true)) {
    $failures[] = 'PDO_SQLSRV is not loaded.';
}

echo $failures === []
    ? "SQLSRV and PDO_SQLSRV are loaded." . PHP_EOL
    : implode(PHP_EOL, $failures) . PHP_EOL;

exit($failures === [] ? 0 : 1);

アプリケーションを提供するPHP実行ファイルで実行します:

php verify-php-drivers.php

予想される出力:

SQLSRV and PDO_SQLSRV are loaded.

このチェックは拡張機能の読み込みの検証を行います。 ODBCの接続性、認証、証明書の信頼、ネットワークアクセス、データベースの権限は検証しません。

結果を記録した後 verify-php-drivers.php 削除してください。

要件違反を診断する

症状: 所有者と思われる チェック
PHP Startup: Unable to load dynamic library PHPランタイムまたは拡張の選択 PHPのマイナーバージョン、アーキテクチャ、スレッドセーフティモード、 extension_dir、そして正確なファイル名
Call to undefined function sqlsrv_connect() SQLSRV拡張設定 php --ri sqlsrv、アクティブ php.ini、スキャンされた .ini ファイル
PDOException: could not find driver PDO_SQLSRV拡張またはPDOロードオーダー php --ri pdo_sqlsrv、 PDO::getAvailableDrivers()、そしてPDOが先に読み込まれるかどうか
ライブラリ msodbcsql または libodbc が見つかりません ODBCインストールまたはオペレーティングシステムローダー インストールするODBCパッケージ、アーキテクチャ、共有ライブラリの依存関係
CLI は成功するが、Web サイトでは失敗する SAPI専用PHP設定 php --iniした後、一時的なphpinfo()ページをと比較してください
拡張機能は読み込まれますが接続に失敗します ODBC、ネットワーク、認証、証明書、またはデータベースターゲット SQLSRVエラーコレクションまたはPDO例外をキャプチャし、報告されたSQLSTATEのトラブルシューティングを行います