Monthly Archives: 9月 2010

PDOをシンプルに使うためのラッパー

このエントリーをはてなブックマークに追加
はてなブックマーク - PDOをシンプルに使うためのラッパー
Share on Facebook

PHPでPDOを使う時、毎回毎回「DBハンドラを取得→クエリを書く→実行する→結果をフェッチする」といった流れを書く必要があり面倒です。使う機会が多いからもっと簡単に使えるラッパーでも作ろうかと思っていたら、すでにありました。

Simple PHP PDO Wrapper : light, static, easy – Let’s explore the web technologies together

使い方

非常に簡単です。下記のサンプルのように使います。

<?php
require_once('Db.php');

$query = <<<QUERY
SELECT  *
FROM    users
WHERE   name LIKE 'John Coltrane'
;
QUERY;

Db::setConnectionInfo('database', 'username', 'password', 'mysql', 'host');
$result = Db::getResult($query);
var_dump($result);
?>

特に結果をフェッチするあたりが簡潔になり、使い勝手が良いです。

注意: PEAR::DBと重複する場合

include_pathにPEARライブラリがあるとき、「require_once ‘Db.php’」などでロードしようとすると、PEAR::DBと重複してエラーになる場合があります。

この場合は、Db.phpを絶対パスで指定する、ファイル名を変更するなどの対策が必要です。

データベーステストのオペレーション

このエントリーをはてなブックマークに追加
はてなブックマーク - データベーステストのオペレーション
Share on Facebook

PHPUnitを使ってDBと連携したテストする際には、PHPUnitのDatabaseTestという拡張を使います。この場合よくあるケースとして、setUp()でテーブルにフィクスチャを入れ、tearDown() でDBを掃除したいことがあります。

そうした処理には、オペレーションと呼ばれるメソッドを使うと便利です。下記にその一覧を書いておきます。

メソッドの詳細は、「\PEAR\PHPUnit\Extensions\Database\Operation\Factory.php」に書いてあります。

オペレーション やる内容
NONE() 何もしない
CLEAN_INSERT() TRUNCATE→INSERT
INSERT() データセットを挿入する
TRUNCATE() Executes a truncate against all tables in a dataset.
DELETE() Deletes the rows in a given dataset using primary key columns.
DELETE_ALL() Deletes all rows from all tables in a dataset.
UPDATE() Updates the rows in a given dataset using primary key columns.

参考

Chapter 9. Database Testing

PHPUnitで文字コード関連のWarningが出るとき

このエントリーをはてなブックマークに追加
はてなブックマーク - PHPUnitで文字コード関連のWarningが出るとき
Share on Facebook

XAMPP環境でPHPUnitを使おうと思ったら以下のような警告が出ました。(テスト自体は実行できます)

PHPUnit 3.4.15 by Sebastian Bergmann.


Warning: DOMElement::setAttribute(): string is not in UTF-8 in C:\xampp\php\PEAR\PHPUnit\Util\Log\JUnit.php on line 307

Warning: DOMElement::setAttribute(): string is not in UTF-8 in C:\xampp\php\PEAR\PHPUnit\Util\Log\JUnit.php on line 421
I
Warning: DOMDocument::saveXML(): output conversion failed due to conv error, bytes 0x82 0xC4 0x82 0xB7 in C:\xampp\php\PEAR\PHPUnit\Util\Log\JUnit.php on line 474


Time: 1 second, Memory: 5.25Mb

OK, but incomplete or skipped tests!
Tests: 1, Assertions: 0, Incomplete: 1.

いろいろ調べた結果、ソースディレクトリに日本語が使われているのが問題でした。このケースでは「c:\temp\てすと」なんてディレクトリに入れていました。

開発のとき日本語ディレクトリを使うのはやめましょう。