PHPからSQL Serverに接続してみる
以下の環境で、PHPからSQL Serverに接続する手順を紹介します。
- Windows 7 SP1(x64)
- IIS7(*インストール済み)
- SQL Server 2008 R2 SP1(*インストール済み)
- PHP 5.4 (5.4.3)(*インストール済み 手順はこちら)
ドライバーの取得
ダウンロードサイトからドライバーをダウンロードします。SQLSRV30.EXEをダウンロードします。SQLSRV30.EXEだとSQL Server 2012 に対応しています。
PHPの拡張設定
PHPでSQLiteの拡張機能を有効化します。php.iniファイル(例:"C:\php\php.ini")を開きます。まず拡張ライブラリのディレクトリが正しく設定されているか確認します(";"でコメントアウトされている場合はコメントアウトを解除します。)。
extension_dir = "[PHPインストールディレクトリ内の"ext"へのパス]"
環境にあったphp_pdo_sqlsrvとphp_sqlsrvドライバをphpのエクステンションディレクトリにコピーします。tsはスレッドセーフ(Thread Safe)、ntsは非スレッドセーフ(Non Thread Safe)です。私の環境には非スレッドセーフのphp 5.4が入っているので、php_pdo_sqlsrv_54_nts.dllとphp_sqlsrv_54_nts.dllをphpの拡張ディレクトリ(例:C:\php\ext)にコピーします。
PHPの設定ファイル(例:"C:\php\php.ini")をテキストエディタで開き、「extension=xxx.dll」と拡張ドライバが列挙されているセクションに以下の2行を追加して保存します。
extension=php_pdo_sqlsrv_54_nts.dll extension=php_sqlsrv_54_nts.dll
Webサーバを再起動し、「」を記述したページを開いて拡張機能が有効化されていることを確認します。PDOサポートとしてSQL Server のドライバが認識されています。
PHPから接続してみる
SQL Serverの「DEMO」と言うデータベースに「dbo(sa)」ユーザが所有する以下のような「employee」テーブルがある前提です。
今回はPDO(PHP Data Object)を使用して接続します。まずはPDOオブジェクトを生成します。コンストラクタの定義はこちら。PDOオブジェクトのコンストラクタの第一引数であるDSN(Data Source Name)ですがSQL Serverの場合の記述は、ダウンロードしたドライバのzip内に含まれるchmに説明があり、以下のようになります。
"sqlsrv:server=[SQL Server インスタンス名];Database = [データベース名]"
今回は試しなので、ユーザ名からパスワードまでコードにべた書きです。
<?php ... $serverName = 'demoserver'; $database = 'demo'; $uid = 'sa'; $pwd = 'password'; $conn = new PDO( "sqlsrv:server=$serverName;Database = $database", $uid, $pwd); ... ?>
次に作成したPDOオブジェクトを使用してSQL文を実行します。マニュアルはこちら
<?php ... $sql = 'select * from dbo.employee'; foreach ($conn->query($sql) as $row) { //返された各行「$row」を使用した処理 } ... ?>
最後に接続を切って終了です。
<?php ... $conn = null; ... ?>
コード全体
テーブルが見やすいようにスタイルを定義してます(デザインセンスのかけらもないですが)。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>SQL Server につないでみる</title> <style type="text/css"> table{ border-color:black; border-style:solid; boder-widht:1px; } td{ border-color:gray; border-style:solid; boder-widht:0.5px; } </style> </head> <body> <table> <caption>社員テーブル</caption> <tr> <td>ID</td> <td>社員名</td> <td>年齢</td> </tr> <?php //PDOオブジェクトの生成 $serverName = 'demoserver'; $database = 'demo'; $uid = 'sa'; $pwd = 'password'; $conn = new PDO( "sqlsrv:server=$serverName;Database = $database", $uid, $pwd); //SQL 実行 $sql = 'select * from dbo.employee'; foreach ($conn->query($sql) as $row) { print("<tr><td>".$row['emp_id']."</td>"); print("<td>".$row['emp_name']."</td>"); print("<td>".$row["emp_age"]."</td></tr>"); } // セッション解放 $conn = null; ?> </body> </html>