プログラム
最後に、アプリケーションをカスタマイズして、PEAR バッファリング メカニズムの全体的なフレームワークを包括的に説明しましょう。
SELECT クエリの結果をバッファリングするために、MySQL_Query_Cache というクラスを定義します。
最初にクラス変数を定義します:
require_once 'Cache.php';
class MySQL_Query_Cache extends Cache {
var $connection = null;
var $expires = 3600;
var $カーソル = 0;
var $result = array();
function MySQL_Query_Cache($container = 'file',
$container_options = array('cache_dir'=> '.',
'filename_prefix' => 'cache_ '), $expires = 3600)
{
$this->Cache($container, $container_options);
$this->expires = $expires
}
function _MySQL_Query_Cache() {
if (is_resource() $this->connection)) {
mysql_close($this->connection);
}
$this->_Cache();
}
}
?>
正式に開始する前に、いくつかのヘルパー関数が必要です。
function connect($hostname, $username, $password, $database) {
$this->connection = mysql_connect($hostname, $username, $password) ortrigger_error('データベース接続に失敗しました!', E_USER_ERROR);
mysql_select_db($database, $this->connection) またはtrigger_error('データベースの選択に失敗しました!', E_USER_ERROR);
}
function fetch_row() {
if ($this->cursor < sizeof($ this->result)) {
return $this->result[$this->cursor++];
} else {
return false;
}
}
function num_rows() {
return sizeof($this ->result);
}
?>
バッファリングの方法を見てみましょう:
function query($query) {
if (stristr($query, 'SELECT')) {
// クエリのキャッシュタグを計算します
$cache_id = md5($query);
// クエリバッファ
$this->result = $this->get($cache_id, 'mysql_query_cache');
if ($this->result == NULL) {
// バッファ損失
$this->cursor = 0;
$this->result = array();
if (is_resource($this- > connection)) {
// 可能な限り mysql_unbuffered_query() を使用します
if (function_exists('mysql_unbuffered_query')) {$result = mysql_unbuffered_query($query, $this->connection);
} else {$result = mysql_query( $query, $this->connection);
}
// すべてのクエリ結果を取得します
while ($row = mysql_fetch_assoc($result)) {$this->result[] = $row;
}
// MySQL 結果リソースを解放します
mysql_free_result($result);
// 結果をバッファリングします
$this->save($cache_id, $this->result, $this->expires, 'mysql_query_cache') ;
}
}
} else {
// クエリ結果なし、バッファリング不要
return mysql_query($query, $this->connection);
}
}
?>
例 3: MySQL の使用クエリバッファリング
$cache = new MySQL_Query_Cache();
$cache->connect('hostname', 'username', 'password', 'database');
$cache->query('select * from table');
while ($row = $cache->fetch_row()) {
echo '
';
print_r($row);
echo '