先日 PHPからSQLServerにつなぐ環境を作りました。(ここ)
次はアクセステストです。実行環境・テストデータは以下の通りです。
※実行環境
- Windows7Pro x86 Sp1
- IIS7.5
- SQL Server Express 2012
- PHP5.4.26 with Microsoft Drivers 3.0 for PHP for SQL Server
※テストデータ
テーブル名とか項目名に日本語を使うのは邪道だとの突込みがありそうですが、Accessからの流れと プログラムの読みやすさから、今までSQL Serverではテーブル名とか列名に日本語をビシバシ使っています。今回のテストではテーブル名・列名に敢えて日本語を使ってみました。
テストデータのデザインおよび入力したデータは下の通りです。
得意先マスタ | |
1.全件表示
最初は SQL文を Select * from 得意先マスタ として全件表示です。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHPでSQL Serverを使う</title> <style type="text/css"> table { background-color:Black; } td { background-color:White; } </style> </head> <body> <table cellspacing="1"> <caption><strong>得意先マスタ全件</strong></caption> <tr> <td>コード</td> <td>得意先名</td> <td>登録日時</td> </tr> <?php //PDOオブジェクトの生成 $conn = new PDO("sqlsrv:server=KAZ-PCSQLEXPRESS;Database=TestDB", "userid", "password"); //SQL 実行 $sql = 'select * from 得意先マスタ'; foreach ($conn->query($sql) as $row) { print("<tr><td>".$row['cd']."</td>"); print("<td>".$row["得意先名"]."</td>"); print("<td>".$row["登録日時"]."</td></tr>"); } // セッション解放 $conn = null; ?> </body> </html>
早速ブラウザから開くと
PHP Notice: Undefined index: 得意先名 in C:php54webspacetestsql.php on line 30
PHP Notice: Undefined index: 登録日時 in C:php54webspacetestsql.php on line 31
のエラー!!
やっちゃいましたネ ついmicrosoftの方言(?)が出ちゃいました。
赤字の部分を 修正して
foreach ($conn->query($sql) as $row) {
print(“”.$row[“cd”].””);
print(“”.$row[1].””);
print(“”.$row[2].“”);
}
と すると
成功です!!!!
2.Selectする項目名を指定し、Whereで抽出してみました。
SQL文を次のようにして 項目名を指定し、Whereで抽出してみました。
$sql = “select cd, 得意先名, 登録日時 from 得意先マスタ where 得意先名=’得意先2′”;
where句に日本語を使っても問題ありません。
3.複数のテーブルを結合してみました。
Select文の最後の例は SQLによる テーブルの結合です。
売上テーブル・商品マスタを作成し SQL文で結合してみました。
SELECT 売上データ.伝票番号,
売上データ.日付,
売上データ.得意先コード,
得意先マスタ.得意先名,
売上データ.商品コード,
商品マスタ.商品名,
売上データ.数量,
売上データ.単価,
売上データ.数量 * 売上データ.単価 AS 金額
FROM 売上データ
LEFT OUTER JOIN 商品マスタ ON 売上データ.商品コード = 商品マスタ.コード
LEFT OUTER JOIN 得意先マスタ ON 売上データ.得意先コード = 得意先マスタ.cd
join句に日本語を使ってもまったく問題ありません。
まとめ
PHPから簡単なSelectSQLでSQL Serverをアクセスした結果、.NetでSQL Serverを使うのと大差なく使用できることがわかりました。Windowsでは プログラムの可読性の向上を目指して日本語を使っても問題ありませんでした。
ただし
項目名に日本語を使っている場合 PHPの仕様のため 抽出した行内の配列要素つまり項目にアクセスする際、日本語項目名をのままキー値として使うことはできませんでした。
PHP初心者のため うまい方法を 見落としてるかも知れません。