PHP 7.1.18 Released

Microsoft SQL Server 関数 (PDO_SQLSRV)


PDO_SQLSRV は、PHP Data Objects (PDO) インターフェイス を実装したドライバです。 PHP から、MS SQL Server (SQL Server 2005 以降) および SQL Azure データベースにアクセスできるようになります。


PDO_SQLSRV 拡張モジュールを有効にするには、適切な DLL ファイルを PHP の拡張モジュール用ディレクトリに配置して、php.ini ファイルにエントリを追加します。 PDO_SQLSRV をダウンロードすると、その中には 8 個のドライバファイルが入っています。 その中の 4 個のファイルが PDO サポート用のファイルです。非スレッドセーフな PHP (PHP 5.3) を実行している場合は php_pdo_sqlsrv_53_nts.dll を使います (ウェブサーバーとして IIS を使っている場合は、非スレッドセーフバージョンを使う必要があります)。 スレッドセーフな PHP を実行している場合は php_pdo_sqlsrv_53_ts.dll を使います。 同様に、PHP 5.4 の場合についても、非スレッドセーフなのかスレッドセーフなのかによって php_pdo_sqlsrv_54_nts.dll あるいは php_pdo_sqlsrv_54_ts.dll のいずれかを使います。

最新版のドライバのダウンロードは » SQLSRV 3.0 download のページでできます。PHP 5.2 を使っている場合や VC6 でコンパイルしたバージョンが必要な場合は、 バージョン 2.0 系を » SQLSRV 2.0 download からダウンロードして使いましょう。

システム要件に関する詳細は » SQLSRV System Requirements を参照ください。

PDO_SQLSRV 拡張モジュールは Windows 版の PHP でしか使えません。 Linux の場合は ODBC および » Microsoft's SQL Server ODBC Driver for Linux を参照ください。


このドライバでは以下の定数が定義されて います。これは拡張モジュールが PHP に組み込まれているか、実行時に動的にロード されている場合のみ使用可能です。さらに、これらのドライバ固有の定数は そのドライバを使用している場合にのみ使用されます。 あるドライバ固有の属性を別のドライバで使うと、予期せぬ結果を引き起こします。 もし複数のドライバを使用しているコードを実行している場合、 PDO::getAttribute()PDO::ATTR_DRIVER_NAME 属性を使用することで、使用中のドライバ名を調べることが可能です。

この定数は、SQLSRV DSN のキー TransactionIsolation で使えます。 この接続のトランザクション隔離レベルを、Read Uncommitted に設定します。
この定数は、SQLSRV DSN のキー TransactionIsolation で使えます。 この接続のトランザクション隔離レベルを、Read Committed に設定します。
この定数は、SQLSRV DSN のキー TransactionIsolation で使えます。 この接続のトランザクション隔離レベルを、Repeateable Read に設定します。
この定数は、SQLSRV DSN のキー TransactionIsolation で使えます。 この接続のトランザクション隔離レベルを、Snapshot に設定します。
この定数は、SQLSRV DSN のキー TransactionIsolation で使えます。 この接続のトランザクション隔離レベルを、Serializable に設定します。
サーバーとの間のデータの送受信を生のバイトストリームで行い、 符号化や変換を一切しないように指示します。 この定数は、 PDOStatement::setAttribute、PDO::prepare、PDOStatement::bindColumn および PDOStatement::bindParam に渡せます。
サーバーとの間のデータの送受信を 8 ビット文字として行い、 システムに設定された Windows のロケールのコードページを利用します。 このコードページにマップできない文字はすべて、シングルバイトのクエスチョンマークに置き換えられます。 この定数は、PDOStatement::setAttribute、PDO::setAttribute、PDO::prepare、 PDOStatement::bindColumn および PDOStatement::bindParam に渡せます。
サーバーとの間のデータの送受信を UTF-8 エンコーディングで行います。 これが、デフォルトの符号化方式です。この定数は、 PDOStatement::setAttribute、PDO::setAttribute、PDO::prepare、 PDOStatement::bindColumn および PDOStatement::bindParam に渡せます。
サーバーとの間のデータの送受信を、接続時に指定した PDO::SQLSRV_ENCODING_SYSTEM に従って行います。プリペアドステートメントの中で指定された場合は、 その接続で設定されているエンコーディングを利用します。この定数は、 PDOStatement::setAttribute、PDO::setAttribute、PDO::prepare、 PDOStatement::bindColumn および PDOStatement::bindParam に渡せます。
非負の整数で、タイムアウト秒数を指定します。ゼロがデフォルトで、これはタイムアウトしないことを意味します。 この定数は、PDOStatement::setAttribute、PDO::setAttribute および PDO::prepare に渡せます。
クエリを直接実行し、準備しないことを指示します。 この定数は、PDO::setAttribute および PDO::prepare に渡せます。詳細な情報は » Direct and Prepared Statement Execution を参照ください。


  • PDO_SQLSRV DSN — MS SQL Server および SQL Azure データベースに接続する
add a note add a note

User Contributed Notes 6 notes

ian at helastel dot com
1 year ago
An updated driver compatible with both PHP 7.0 and Linux is available on the PHP-7.0-Linux branch of

This is more up to date and supports some additional features over the ODBC / DBLIB drivers.

It is currently considered an 'Early Technical Preview' and hence has some limitations, but in my experience it has been stable.
php at zootal dot com
5 months ago
Disclaimer: this is how I was able to connect to a Microsoft sql server via PDO using the PECL pdo_sqlsrv extension and unixodbc. PHP 7.2. Linux – Slackware 14.2. These comments represent my understanding at the time I wrote this, what I did to get this working, and may contain errors. I am not responsible for any problems or damage etc. that might occur if you follow these instructions. YMMV. This worked for me, I hope it helps you.

This is an extension to the comment I posted yesterday that can be found here ( This version is more complete and includes expanded instructions.

I compiled and installed PHP from source. If you use your package manager to do this, then it is up to you to figure out how to get --with-pdo-dblib --with-pdo-odbc=unixODBC working, as well as how to install the PECL pdo_sqlsrv extension.

Do NOT install freetds. pdo_sqlsrv does not require freetds.
Do NOT install the Microsoft ODBC driver. pdo_sqlsrv does not use it.
Do NOT install the PECL "sqlsrv" extension. It is not needed.

Install unixODBC. I had to download and install from source because the package manager version did not work. How you do this is up to you, but if you get compile errors when compiling PHP, your unixODBC install is a likely culprit.

Install PHP 7.2 (or whatever version you want). When you configure PHP, be sure to include:

  --with-pdo-dblib --with-pdo-odbc=unixODBC

If you get compile errors, try it without --with-pdo-odbc=unixODBC to make sure it isn't something else causing the problem.

After you get PHP installed and working, install the PECL pdo_sqlsrv extension:

pecl install pdo_sqlsrv.

This is all the setup that is required to get this to work.

This is how I successfully connected to and queried a mssql table. In this case, I used the ip address of my sql server, not host or server name. Notice the variable names $pdo_object and $pdo_statement_object. I used them to indicate what data types those variables actually represent. $dsn is simply a text string containing the ip address and default database for the connection to your mssql server. Also note that in $dsn we use “dblib:host”, NOT “sqlsrv:host”. I believe this to be a critical distinction, as many examples of how to use pdo seem to use “sqlsrv:host”, which IIAC utilizes the sqlsrv extension and the MS ODBC driver, *not* pdo. This caused me a lot of grief until I figured this out.


= 'dblib:host=<ip address>;dbname=<database name>';
$user = 'user id';
$password = 'password';

$pdo_object = new PDO($dsn, $user, $password);
catch (
PDOException $e)
'Connection failed: ' . $e->getMessage();

$sql = "SELECT * from <some table>";
$pdo_statement_object = $pdo_object->prepare($sql);
// $result = $pdo_statement_object->fetch(PDO::FETCH_ASSOC);
$result = $pdo_statement_object->fetchAll();
John P
3 years ago
As of 12/12/2014, Microsoft has officially released Version 3.1.

Support for 5.5 has 4 drivers

Note: Version 3.1 now supports PHP 5.5 and requires Microsoft ODBC Driver 11 (or higher)

You can downlod the new driver from
3 years ago
SQLSRV 3.2 is now available from Microsoft that supports PHP 5.6
fleduc dot perso at gmail dot com
8 months ago
Watch out!

If you use PDO SQLSRV on windows 7, using 32 bit php on XAMMP, you might encounter driver problems : "This extension requires the Microsoft ODBC Driver 11 for SQL Server to communicate with SQL Server"

The reason, Microsoft 32-bit ODBC driver doesn't install properly on 64-bit Windows 7.

Check the solution to PDO SQLSRV driver problem here in StackOverflow
3 years ago
Note that Microsoft has not been updating this driver for some time.  There are unofficial builds for PHP 5.5 based on patches against the source code head revision (from codeplex), and unconfirmed rumors that getting the source to build with PHP 5.6 is difficult.

Official versions have been released only for PHP 5.2, 5.3 and 5.4.
These problems probably apply to both the PDO driver (pdo_sqlsrv) and the non-PDO driver (sqlsrv extension), since they seem to be built and released together.
To Top