Caching
 

キャッシング - 洛陽大通りネットワークは、ログイン|抽象データベースインターフェイスの独自のMVCとPHPの開始(b)に

(データ操作の管理を使用して)抽象的なデータベースとのインターフェイス
gbvy[W
第二に、抽象的なデータベースインターフェイス(データ操作を管理使用して)

次の手順は、このようなクラスのDbクラスです。。
<?php
/**************************************************************
* descriptの。 mysqlデータベースの操作管理
*
*著者:それ以上の年齢の十代の若者たち
* Email :
* qq :
* msn :
*************************************************************/
/*
*例1:シーケンスを取得
* <?
* $db = new Db();
* $result = $db->getSeq('art_id', 2, 1);
* ?>
*/
/*
*例2:ページのクエリ
* <?
* $db = new Db();
* $result = $db->&queryPage('select id,name from table', 2, 10, DB_FETCH_ASSOC);
* foreach($result as $row)
* echo $row['id'],'------'.$row['name'].'<br>';
* ?>
*/
/*




* <?
* $db = new Db();
* $result = $db->execute("insert into table (id, name) values(1,'name')");




*他の'データを挿入するために失敗しました'エコー;
* ?>
*/
/*
*データベースとの接続オプションを定義します。
* @ヴァールDB_HOST文字列データベースのホスト名またはアドレス

* @ヴァールdb_userは文字列のデータベースユーザー名
* @ヴァールDB_PWD文字列データベースユーザーのパスワード
* @ヴァールDB_PCONNECTブール値の永続的な接続を確立するかどうかを
*/
define('DB_HOST', 'localhost');
define('DB_NAME', 'test');
define('DB_USER', 'root');
define('DB_PWD', '');
define('DB_PCONNECT', true);
/*
*は、クエリ結果のタイプを定義データを返す
* @ヴァールDB_FETCH_ASSOC int型の結果メソッド呼び出し:$結果['name']は


* @ヴァールDB_FETCH_OBJECT int型の結果メソッド呼び出し:は$ result ->名前
*/
define('DB_FETCH_ASSOC', 0);
define('DB_FETCH_NUM', 1);
define('DB_FETCH_BOTH', 2);
define('DB_FETCH_OBJECT', 3);
/*
*デフォルトのシーケンスジェネレータの名前を定義します。
*/
define('DB_SEQUENCE_TABLENAME', 'sequences');
class Db{
/*
*現在のデータベース接続オプション
*/
var $dbHost = DB_HOST;
var $dbName = DB_NAME;
var $dbType = 'Mysql';
var $dbUser = DB_USER;
var $dbPwd = DB_PWD;
var $pcnn = DB_PCONNECT;
/*

*/
var $cnn = '';
/*
データクエリ結果の*戻り値の型
*/
var $queryFetchType = DB_FETCH_ASSOC;
/*
*初期化関数
*/
function Db(){
$this->cnn = ($this->pcnn? mysql_connect($this->dbHost, $this->dbUser, $this->dbPwd):
mysql_connect($this->dbHost, $this->dbUser, $this->dbPwd)) or
の$ this -> _halt('データベース接続エラー');
mysql_select_db(の$ this -> dbnameには、$ this -> CNN)を利用したりします$ this -> _halt('データベース選択エラー');
}
/*
*データのクエリ機能
*


*
データクエリの結果* @配列を返す
*/
function &query($sql, $fetchType=DB_FETCH_ASSOC){
$data = array();
$ルピー=&するmysql_fetch_array($ sqlには、$ this -> CNN)を利用したりします$ this -> _halt('データのクエリのエラー'、$ sql)を;
$exe = $this->_getCommand($fetchType);
while($row=&$exe($rs))
$data[] = &$row;
return $data;
}
/*
*ページングデータクエリ機能
*

* @ Paramの$ページのint型、現在の事前チェックページ
*は@ Paramの$はintをpageSizeでどのようにページごとのレコード数
* @ Paramの$ fetchType int型の戻り値の型のデータのクエリの結果
*
*データクエリの結果を、データページの情報
* @配列を返すには(ページあたりのバー=>数を'pageSizeで'


*'ページ'=>現在のページ
*'IsFirst'=>最初のページをしません。
*'IsLast'=>最後のページをしません。

*'はSQL'=> SQL文のクエリ
*'データ'=>クエリのデータの結果が得られた
* )
*データクエリの結果を、データページの情報
*/
function &queryPage($sql, $page=1, $pageSize=20, $fetchType=DB_FETCH_ASSOC){
$countSql = preg_replace('|SELECT.*FROM|i','SELECT COUNT(*) count FROM', $sql);
$data['pageSize'] = (int)$pageSize<1? 20: (int)$pageSize;
$data['recordCount'] = $this->getOne($countSql, 'count');
$data['pageCount'] = ceil($data['recordCount']/$data['pageSize']);
$data['page'] = $data['pageCount']==0? 0: ((int)$page<1? 1: (int)$page);
$data['page'] = $data['page']>$data['pageCount']? $data['pageCount']:$data['page'];
$data['isFirst'] = $data['page']>1? false: true;
$data['isLast'] = $data['page']<$data['pageCount']? false: true;
$data['start'] = ($data['page']==0)? 1: ($data['page']-1)*$data['pageSize']+1;
$data['sql'] = $sql.' LIMIT '.($data['start']-1).','.$data['pageSize'];
$data['data'] = &$this->query($data['sql'], $fetchType);
return $data;
}
/*
*データのクエリはデータのみの1行目
*
* @ Paramの$ sqlに文字列データのクエリ

*

*/
function &queryRow($sql, $fetchType=DB_FETCH_ASSOC){
$ルピー=&するmysql_fetch_array($ sqlには、$ this -> CNN)を利用したりします$ this - _halt>('単一行のデータのクエリエラー'、$ sql)を;
$exe = $this->_getCommand($fetchType);
return $exe($rs);
}
/*
*データのクエリのみを返します最初のn行のデータを1列
*
* @ Paramの$ sqlに文字列データのクエリ

*
単一のフィールドの* @ return文字列の値を返します。
*/
function &getOne($sql, $field = 0){
$ルピー=&するmysql_fetch_array($ sqlには、$ this -> CNN)を利用したりします$ this -> _halt('単一のデータのクエリのエラー'、$ sql)を;
$row = mysql_fetch_array($rs);
return $row[$field];
}
/*
* DELECT /のINSERT / UPDATEを含むSQL文は、.....文の実装
*
* @ Paramの$ sqlに文字列データのクエリ
*
データの行数* @を文字列として返す戻り値ステートメント
*/
function execute($sql){

return mysql_affected_rows($this->cnn);
}
/*

*/
function getInsertId(){
return mysql_insert_id($this->cnn);
}
/*
繰り返していない値のシーケンスを生成するための*シーケンスジェネレータ
*
シーケンスの* @ Paramの$ fieldNameに文字列名
* @ Paramの$ステップint型の間隔のシーケンス番号

*
新しいシーケンスの* @戻りint値
*/
function getSeq($fieldName, $step=1, $start=1){
$table = DB_SEQUENCE_TABLENAME;
$step = (int)$step;
$start = (int)$start;
$rs = mysql_query("UPDATE $table SET seq_num=seq_num+($step) WHERE seq_name='$fieldName'");
if(!$rs || mysql_affected_rows($this->cnn)<1){
$rs = mysql_query('SELECT * FROM '.DB_SEQUENCE_TABLENAME, $this->cnn);
if(!$rs){
$sql = "CREATE TABLE $table (
seq_name VARCHAR( 20 ) NOT NULL ,
seq_num BIGINT( 20 ) DEFAULT 1 NOT NULL ,
PRIMARY KEY (seq_name))";
$ルピー=するmysql_fetch_arrayは、($ SQL)またはします$ this -> _halt('シーケンスジェネレータのテーブルを作成に失敗しました'、$ sql)を;
}
$rs = mysql_query("INSERT INTO $table VALUES('$fieldName', $start)") or
$これは-> _halt(つまり、$ sqlに'新しいシーケンスエラーを追加');
$seq = $start;
}else{
$seq = &$this->getOne("SELECT seq_num FROM $table WHERE seq_name='$fieldName'");
}
return $seq;
}
function _getCommand($fetchType){
switch($fetchType){
case DB_FETCH_ASSOC: $exe = 'mysql_fetch_assoc'; break;
case DB_FETCH_NUM: $exe = 'mysql_fetch_row'; break;
case DB_FETCH_BOTH: $exe = 'mysql_fetch_array'; break;
case DB_FETCH_OBJECT: $exe = 'mysql_fetch_object'; break;
default: $exe = 'mysql_fetch_array'; break;
}
return $exe;
}
function _halt($msg){
$errNo = mysql_errno($this->cnn);
$errStr = mysql_error($this->cnn);
("死ぬデータベースエラー:$ msgに
$ errnoは:$ errstrに");
}
}
?>