Symfoware

Symfowareについての考察blog

Firebird 2.5.2にPHPから接続する(PDO_FIREBIRD)

FreeBSD 10.0にインストールしたPHP 5からFirebirdに接続できるようにしてみます。


事前準備



FreeBSDにApacheやPHP、Firebirdをインストールしておきます。

FreeBSDのインストール
FreeBSD 10.0-RELEASEを仮想環境(UbuntuのKVM)にインストールする

Apache 2.4のインストール
FreeBSD 10.0にApache 2.4をインストールする(pkg install使用)

PHP 5のインストール(ports使用)
FreeBSD 10.0にphp5をインストールする(ports使用)

PHP 5拡張のインストール方法
FreeBSD 10.0のPHP5からMariaDBに接続する

Firebirdのインストール
FreeBSD 10.0にFirebird 2.5.2をインストールする(pkg install使用)





PHP拡張(PDO_FIREBIRD)のインストール



こちらを参考にしました。
http://www.php.net/manual/ja/ref.pdo-firebird.php

Apache, PHP 5, Firebirdがインストールしてある状態から
作業を始めました。

portsからPHP 5のインストールを行います。
/usr/ports/lang/php5-extensions/に移動して、make config実行。


# cd /usr/ports/lang/php5-extensions/
# make config




「PDO_FIREBIRD」を有効にします。

354_01.png


既にphp-extentionをインストールしたことがあるなら、一回アンインストールします。


# make clean
# make deinstall




make、make installでPHP拡張をインストールします。


# make
# make install




extensions.iniを表示して、「pdo_firebird.so」が有効になっていることを確認。


# cat /usr/local/etc/php/extensions.ini
(略)
extension=pdo_firebird.so




Apacheを再起動します。


# service apache24 restart




phpinfoを表示して「PDO_FIREBIRD」が有効になっていれば設定完了です。

354_02.png





接続テスト




ちゃんと接続できるかテストしてみます。


  1. <?php
  2. try {
  3.     // ローカルのデータベース「test.fdb」に
  4.     // ユーザー名「sysdba」、パスワード「masterkey」で接続
  5.     $db = new PDO ('firebird:dbname=localhost:/usr/local/firebird/test.fdb;charset=UTF8', 'sysdba', 'masterkey');
  6.     
  7.     echo 'Firebirdと接続成功';
  8.     // 切断
  9.     unset($db);
  10. } catch (PDOException $e) {
  11.     echo $e->getMessage();
  12. }





そっけないですが、ちゃんと接続できているようです。

354_03.png




検索サンプル



データを検索するサンプルはこんな感じになりました。


  1. <?php
  2. // ローカルのデータベース「test.fdb」に
  3. // ユーザー名「sysdba」、パスワード「masterkey」で接続
  4. $db = new PDO ('firebird:dbname=localhost:/usr/local/firebird/test.fdb;charset=UTF8', 'sysdba', 'masterkey');
  5. $stmt = $db->query('SELECT * FROM test');
  6. $rs = $stmt->fetchAll();
  7. foreach ($rs as $row) {
  8.     echo $row['ID'];
  9.     echo ':';
  10.     echo $row['NAME'];
  11.     echo '<br/>';
  12. }
  13. // 切断
  14. unset($db);




データはPythonから登録したものです。
文字化けなしでちゃんと取得できているようです。

354_04.png






名前付きパラメータを使用した検索



プリペアドステートメントを使ってみます。


  1. <?php
  2. // ローカルのデータベース「test.fdb」に
  3. // ユーザー名「sysdba」、パスワード「masterkey」で接続
  4. $db = new PDO ('firebird:dbname=localhost:/usr/local/firebird/test.fdb;charset=UTF8', 'sysdba', 'masterkey');
  5. $stmt = $db->prepare('SELECT * FROM test WHERE id = :id');
  6. $stmt->execute(array(':id' => 2));
  7. $rs = $stmt->fetchAll();
  8. foreach ($rs as $row) {
  9.     echo $row['ID'];
  10.     echo ':';
  11.     echo $row['NAME'];
  12.     echo '<br/>';
  13. }
  14. // 切断
  15. unset($db);




ちゃんと検索出来ました。

354_05.png





データの追加、更新



データの追加や更新を試してみます。


  1. <?php
  2. // ローカルのデータベース「test.fdb」に
  3. // ユーザー名「sysdba」、パスワード「masterkey」で接続
  4. $db = new PDO ('firebird:dbname=localhost:/usr/local/firebird/test.fdb;charset=UTF8', 'sysdba', 'masterkey');
  5. // データを追加
  6. $db->exec("INSERT INTO test (id, name) VALUES (3, 'テストデータ3')");
  7. // データの更新
  8. $db->exec("UPDATE test SET name = 'テスト2更新' WHERE id = 2");
  9. // 更新結果を確認
  10. $stmt = $db->query('SELECT * FROM test');
  11. $rs = $stmt->fetchAll();
  12. foreach ($rs as $row) {
  13.     echo $row['ID'];
  14.     echo ':';
  15.     echo $row['NAME'];
  16.     echo '<br/>';
  17. }
  18. // 切断
  19. unset($db);





ちゃんと追加や更新が行えました。

354_06.png





名前付きパラメータを使用した追加、更新



名前付きパラメーターを使用して、データの追加や更新を行なってみます。


  1. <?php
  2. // ローカルのデータベース「test.fdb」に
  3. // ユーザー名「sysdba」、パスワード「masterkey」で接続
  4. $db = new PDO ('firebird:dbname=localhost:/usr/local/firebird/test.fdb;charset=UTF8', 'sysdba', 'masterkey');
  5. // データを追加
  6. $stmt = $db->prepare("INSERT INTO test (id, name) VALUES (:id, :name)");
  7. $stmt->execute(array(':id' => 4, ':name' => 'テストデータ4'));
  8. // データの更新
  9. $stmt = $db->prepare("UPDATE test SET name = :name WHERE id = :id");
  10. $stmt->execute(array(':id' => 2, ':name' => 'テスト2再更新'));
  11. // 更新結果を確認
  12. $stmt = $db->query('SELECT * FROM test');
  13. $rs = $stmt->fetchAll();
  14. foreach ($rs as $row) {
  15.     echo $row['ID'];
  16.     echo ':';
  17.     echo $row['NAME'];
  18.     echo '<br/>';
  19. }
  20. // 切断
  21. unset($db);




狙い通りの結果が得られました。

354_07.png


関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/03/08(土) 20:48:08|
  2. Firebird
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Windows Server 2012 R2にFirebird 2.5.2をインストールする | ホーム | Firebird 2.5.2にPythonから接続する(fdb使用)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1316-465d82a6
この記事にトラックバックする(FC2ブログユーザー)