/**
*作者:Chu Shi
* QQ: 345610000
*/
クラス myPDO は PDO を拡張します
{
public $cache_Dir = null //キャッシュディレクトリ
;
public $cache_expireTime = 7200; //キャッシュ時間、デフォルトは 2 時間です
//キャッシュを使用したクエリ
パブリック関数 cquery($sql)
{
//キャッシュ保存用一般ディレクトリ
if ($this->cache_Dir == null || !is_dir($this->cache_Dir)) {
exit (「キャッシュ ディレクトリが間違っています!」);
} その他 {
$this->cache_Dir = str_replace("", "/", $this->cache_Dir);
$FileName = trim($this->cache_Dir, "/") . urlencode(trim($sql)) .
}
//キャッシュ生成の判断
if (!file_exists($FileName) || time() - filemtime($FileName) > $this->cache_expireTime) {
If ($tmpRS =parent::query($sql)) {
$data = シリアル化($tmpRS->fetchAll());
Self::createFile($FileName, $data);
} その他 {
exit ("SQL 構文エラー
");
}
}
$this->readCache($FileName) を返します;
}
//キャッシュファイルを読み込む
プライベート静的関数 readCache($FilePath)
{
if (is_file($FilePath) && $Data = file_get_contents($FilePath)) {
新しいcache_PDOStatement(unserialize($Data))を返します;
}
false を返します;
}
//ファイルを生成
パブリック静的関数 createFile($FilePath, $Data = '')
{
if (file_put_contents($FilePath, $Data)) {
true を返します;
} その他 {
false を返します;
}
}
}
//キャッシュはStatementクラスを使用します
クラスcache_PDOStatement
{
プライベート $recordArr = array();
プライベート $cursorId = 0;
プライベート $recordCount = 0;
パブリック関数 __construct($arr)
{
$this->recordArr = $arr;
$this->recordCount = count($arr);
}
// レコードを返し、ポインタを 1 行下に移動します
パブリック関数 fetch()
{
if ($this->cursorId == $this->recordCount) {
false を返します;
} else if ($this->cursorId == 0) {
$this->cursorId++;
現在の($this->recordArr)を返します;
} その他 {
$this->cursorId++;
次を返す($this->recordArr);
}
}
//すべての結果を返します
パブリック関数 fetchAll()
{
$this->recordArr;
を返す
}
//単一行、単一列のクエリ
パブリック関数 fetchColumn()
{
$tmpArr = 現在($this->recordArr);
$tmpArr[0]を返します;
}
}
$db = 新しい myPDO('mysql: host = localhost;dbname=news','newsadmin','123456');
;
$db->cache_expireTime = 7200; //キャッシュ時間を設定します
;
while ($row = $rs->fetch()) {
echo $row["F_title"] "
";
}
$db = null;