1.3 PHPからSQL Serverに接続するコード
PHPからSQL Server Driver for PHPを使用してSQL Serverに接続するサンプルコードを紹介します。
このコードが接続するデータベースの情報は以下のとおりです。
- インスタンス名 : .\SQLEXPRESS
- データベース名 : MyDB
- テーブル名 : staffs
<html> <head> <title></title> </head> <body> <?php //データベースのインスタンス名を指定 $serverName = ".\\SQLEXPRESS"; //接続情報を指定 $connectionInfo = array("UID"=>"sa", "PWD"=>"password", "Database"=>"MyDB", "CharacterSet"=>"UTF-8"); //コネクションを確立 $conn = sqlsrv_connect($serverName, $connectionInfo); //クエリー文を指定 $tsql = "SELECT * from staffs"; //クエリーを実行 $result = sqlsrv_query($conn, $tsql); ?> <table> <caption>スタッフリスト</caption> <?php //実行結果を描画 while($row = sqlsrv_fetch_array($result)) { printf("<tr><td class='hdr'>".$row['id']."</td>"); printf("<td>".$row['name']."</td></tr>"); } ?> </table> <?php //クエリー結果の開放 sqlsrv_free_stmt($result); //コネクションのクローズ sqlsrv_close($conn); ?> </body> </html>
実行結果は以下の通りです。日本語を出力しても文字化けが発生していないことを確認してください。
1.4 便利なPDOによる接続
前述しましたが、SQL Server Driver for PHP Version 2.0ではPDO(PHP Data Object)をサポートしています。
PDOはPHPに実装されているデータベース抽象化レイヤークラスであり、これを使用すると同じ関数を使用して複数種類にデータベースに接続することができます。
たとえば、PDOを使用しないでPHPコードからデータベースに接続する場合、MySQLに接続する際はmysql_connect関数を、SQL Serverに接続する際にはsqlsrv_connect関数を、とそれぞれ異なる関数を使い分ける必要がありますが、PDOの場合は共通の関数を使用することができます。
<html> <head><title>PHP TEST</title> <style type="text/css"> table{ border-color:skyblue; border-style:solid; boder-widht:1px; width:300px; } .hdr{background-color:gainsboro} </style> </head> <body> <table> <caption>スタッフリスト</caption> <?php $dsn = 'sqlsrv:server=.\sqlexpress;database=MyDB'; $user = 'sa'; $password = 'P@ssword'; $dbh = new PDO($dsn, $user, $password); $sql = "select * from staffs"; foreach ($dbh->query($sql) as $row) { print("<tr><td class='hdr'>".$row['id']."</td>"); print("<td>".$row["name"]."</td></tr>"); } $dbh = null; ?> </table> </body> </html>
たとえば、上記のサンプルコードは、PHPからSQL Serverに接続するコードですが、接続文字列とアカウント情報を以下のように書き換えることによりMySQLにも同じコードで接続することができます。
$dsn = 'mysql:host=localhost;dbname=MyDB'; $user = 'root'; $password = 'P@ssword
データベースインスタンス名と、データベース名を指定する文字列がsqlsrvとmysqlでは微妙に異なることに注意してください。
PDOを使用することにより、PHPアプリケーションは、複数のデータベースのサポートが容易になります。
また、最近のPHPのOSS WebアプリケーションでもPDOを使用しているものが結構あるようなので、たとえばWebアプリケーションがMySQLに対して作成しているデータベーススキーマをSQL Serverにまったく同じく作成して、そちらを使用させるということもできそうです。