define("ユーザー名","ルート");
定義("パスワード","ルート");
定義("データベース名","ahcdb");
定義("ホスト名","ローカルホスト");
クラスBaseDao {
関数 getConnection() {
$link = mysql_connect(ホスト名, ユーザー名, パスワード);
if (!$link)
die("接続できませんでした: " .mysql_error());
if (!mysql_select_db(dbName))
die("データベースを選択できませんでした: " .mysql_error());
$link を返します;
}
function setParams(& $sql, $params) {
if($params != null)
$sql = vsprintf($sql, array_map(function($n) {
if(is_int($n))
return (int)$n;
if(is_float($n))
return (float)$n;
if(is_string($n))
return "'".mysql_real_escape_string($n)."'";
return mysql_real_escape_string($n);
}, $params));
}
functionexecuteQuery($sql, $params, $callback = null) {
$link = $this->getConnection();
$this->setParams($sql, $params);
$return = null;
if(($result = mysql_query($sql, $link)) != null)
if($callback != null)
$return = $callback($result, $link);
if($link != null)
mysql_close($link);
if(!$result)
die("致命的なエラー: 無効なクエリ '$sql' : " .mysql_error());
$return;
を返す
}
function getList($sql, $params, $callback) {
return $this->executeQuery($sql, $params, function($result, $link) use ($callback) {
$idx = 0;
$list = array();
while ($row = mysql_fetch_assoc($result))
if($callback != null)
$list[$idx] = $callback($idx++, $row);
$list を返します;
});
}
function getSingle($sql, $params, $callback) {
return $this->executeQuery($sql, $params, function($result, $link) use ($callback) {
if ($row = mysql_fetch_assoc($result))
$obj = $callback($row);
$obj を返します;
});
}
}
クラスの例 {
var $id;
var $name;
関数の例($id, $name){
$this->id = $id;
$this->name = $name;
}
関数 setId($id){
$this->id = $id;
}
}
クラス ExampleDao は BaseDao を拡張します {
関数 getAll(){
returnparent::getList("ノードから * を選択", null, function($idx, $row) {
return new Example($row["id"], $row["name"]);
});
}
関数ロード($id){
returnparent::getSingle("id = %1$s のノードから * を選択", array($id), function($row) {
return new Example($row["id"], $row["name"]);
});
}
関数の更新($example){
returnparent::executeQuery("update nodes set name = '' where id = -1", null, function($result, $link){
$result を返します;
});
}
関数挿入(& $example){
returnparent::executeQuery("ノードに挿入", null, function($result, $link) use ($example){
$id = mysql_insert_id($link);
$example->setId($id);
$result を返します;
});
}
}
$exampleDao = 新しい ExampleDao();
$list = $exampleDao->getAll());
$exampleObject = $exampleDao->load(1));
$exampleDao->update($exampleObject);
?>