データベース操作クラスは Jiyi Blog によって提供されています
1. シングルトン設計パターンを採用 このクラスは、このクラスのインスタンス オブジェクトの独自の実装を保証するためにシングルトン設計パターンを採用しています
public static $_instance; //静态属性,存储实例对象
/** * 私有化构造函数 这是构造单例设计模式必须的一步 */private function __construct($config=''){ $this->config = $this->parseConfig($config);}
/** * 实例化对象 采用静态公共方法 */public static function Instance(){ if(self::$_instance instanceof self){ return self::$_instance; } self::$_instance = new self; return self::$_instance;}
2.機能紹介
まず、このクラスはマスター/スレーブレプリケーションデータベースの接続をサポートし、1つのマスターと複数のスレーブモードのデータベースをサポートします
スレッドが接続しているスレーブサーバーがダウンした場合、プログラムは自動的に他の通常のスレーブに再接続します
次に、新しいデータがデータテーブルに追加されるとき、このクラスは一度に複数のデータを追加することをサポートしており、これらの複数のデータは異なるテーブルにすることができます
複数のデータを指定できます。 addMore 関数の 2 番目のパラメータによるテーブル挿入、その実装コア コードは次のとおりです
/** * 一次性插入多条数据,支持不同表的插入 * 当使用多表插入功能时需要在第二个参数中指定 $options['multitable'] = true * 并且$data的格式为 * array( * '表名1'=>array(array(),array()), * '表名2'=>array(array(),array()) * ) * @param array $data * @param array $options * @return boolean */ public function addMore($data = array(),$options = array()){ if(isset($options['table'])) $this->table($options['table']); if(!is_array($data)) return false; /* * 开启事务处理多条语句 */ $this->startTransaction(); foreach($data as $key=>$val){ //查看是否是多表插入 if(isset($options['multitable'])&&$options['multitable']){ /* * 多表插入,则$key为表名,$val为要插入的数据 * 使用递归的方式再次对多条数据进行插入 */ $res = $this->addMore($val,array('table'=>$key)); }else{ //单表插入 $res = $this->add($val); } if(!$res){ //如果有一条数据插入失败,则回滚事务,撤销所有的操作 $this->rollback(); return false; } } //如果所有插入操作无误,则提交事务 $this->commit(); return true;}
複数の挿入データの 1 つが挿入に失敗した場合、他の挿入データはトランザクション ロールバックによってキャンセルできます
3. その他は通常の追加、削除、変更、クエリをサポートします
以下に使用する関数の使用法を紹介します
1) オブジェクトをインスタンス化します
このクラスを使用するには、最初にクラスのオブジェクトをインスタンス化する必要があります
$obj = Db::Instance();
2) data
データの検索に使用する関数は select() と find() の 2 つの関数
複数のデータを検索する select() 関数
使用例
$res = $obj->field('id,name')->where('id > 10')->select();
戻り値:
false を返すのに失敗、検索は成功複数のデータを返す
array( array('id'=>11,'name'=>'迹忆博客1'), array('id'=>12,'name'=>'迹忆博客2'),)
find() は1つのデータを返す
$res = $obj->field('id,name')->where('id=10')->find()
戻り値
検索が失敗した場合は false を返す 検索が成功した場合は 1 つのデータを返す
array('id'=>10,'name'=>'迹忆博客')
3) データを追加する
データを追加するには、add($data,$options) と addMore($data,$options) の 2 つの関数があります
add($data.$options)
$data 追加するデータ
データ形式
array('id'=>13,'name'=>'onmpw')
$options オプションのパラメータ
テーブル名形式はarray('table'=>'テーブル名')で指定可能 ここで指定したテーブル名が最も優先されます
戻り値
挿入が失敗した場合はfalseを返します 挿入が失敗した場合は、挿入された項目の数を返します。成功しました
addMore($data,$options)
$options オプションでタイトルを挿入するか単一のテーブルを挿入するかを指定できます
'multitable'=>true 多表插入 如果设定此项则默认是单表插入 多表插入$data的数据格式$data = array( 'tablename1'=>array( array('id'=>20,'name'=>'迹忆博客1'), array('id'=>21,'name'=>'迹忆博客2'), array('id'=>22,'name'=>'迹忆博客3') ), 'tablename2'=>array( array('id'=>20,'name'=>'迹忆博客1','url'=>'www.onmpw.com'), array('id'=>21,'name'=>'迹忆博客2','url'=>'www.onmpw.com'), array('id'=>22,'name'=>'迹忆博客3','url'=>'www.onmpw.com') ))
'multitable'=>false / 不设定此项 单表插入 $data的数据格式为 $data = array( array('id'=>31,'name'=>'迹忆博客1','url'=>'www.onmpw.com'), array('id'=>32,'name'=>'迹忆博客2','url'=>'www.onmpw.com'), array('id'=>33,'name'=>'迹忆博客3','url'=>'www.onmpw.com'), )
'table'=>'table name' は、データが挿入されるデータ テーブルの名前を指定します。この項目は単一のテーブルに挿入する場合に有効で、他のテーブル名の指定方法よりも優先されます
戻り値
挿入が失敗した場合はFalseが返され、挿入が成功した場合は挿入されたアイテムの数が返されます
4) update($data, $options)を変更する
データを変更する関数
$data 変更するデータ、形式は
array('name'=>'onmpw','url'=>'http://onmpw.com');
$optionsはテーブル名を指定できます
'table'=>'テーブル名'
戻り値
更新に失敗した場合はfalseを返す 正常に更新された番号を返す
5) 削除delete($options)
$optionsでテーブル名を指定可能
'table'=>'テーブル名'このタイプの指定されたテーブル名が最も優先されます
例
$res = $obj->table('repl')->where('id=10')->delete(); //删除repl表下id=10的记录$res = $obj->table('repl')->where('id=13')->delete(array('table'=>'test')); //删除test表下id=13的记录
は
$res = $obj->where('id=13')->delete(array('table'=>'test'))
戻り値
削除が失敗した場合は false を返し、削除が成功した場合は削除されたレコードの数を返します
6) table($str ) 関数はテーブル名を指定します
$obj->table('test') //指定当前操作的表为test表
戻り値は現在のオブジェクトオブジェクトです
7) where($where) は場所条件を指定します
$where は文字列または配列にすることができます
string
$obj->table('test')->where("name='迹忆博客',url='www.onmpw.com'");
array
$obj->table('test')->where(array('name'=>'迹忆博客','url'=>'www.onmpw.com'))
戻り値は現在のオブジェクト object です
8) field($field) はクエリのフィールドを指定します 名前
$obj->table('test')->field('name,url')->select();
クエリ時に field() 関数を使用してフィールドを指定しない場合、テーブルのすべてのフィールドがデフォルトでクエリされる
戻り値は現在のオブジェクト object です
9) orderby($str) は並べ替えるフィールドを指定します
$obj->table('test')->field('id,name,url')->where("name='迹忆博客'")->orderby('id DESC')->select();
id の降順に並べます
$obj->table('test')->field('id,name,url')->where("name='迹忆博客'")->orderby('id')->select();
降順または昇順
戻り値は現在のオブジェクト object
10) limit($limit)
$limt は文字列または配列にすることができます
array
array(page,listrows)
page は現在のページ番号を指定します listrows はレコードの数を指定します各ページから取り出す
String
10,12
10は10番目のレコードから開始することを意味し、12は取り出したレコードの数を意味します
$res = $obj->table('test')->field('id,name,url')->where("name='迹忆博客'")->orderby('id DESC')->limit('10,12')->select()
戻り値は現在のオブジェクト object
11) sql( $sql) 指定された SQL ステートメントを実行します
$sql = "select name,url from test where name='迹忆博客'";$res = $obj->sql($sql);
実行結果を返します