素晴らしい MySQL クラス

WBOY
リリース: 2016-06-21 08:51:53
オリジナル
828 人が閲覧しました

CRUD、トランザクション、ツリー再帰クエリ、ページングなどが含まれます。すべてのパラメータがエスケープされており、インジェクションの問題がありません。

/*

* Anthony.chen

※2010年予約

*/

クラス DB {

// クエリの種類

const SELECT = 1;

const INSERT = 2;

const UPDATE = 3;

const DELETE = 4;

const T = 't';

const F = 'f';

/*

* 複数のデータを返すサポート;

*/

パブリック静的関数 insert_table($table_name,$data,$return_id='id',$db='default'){

if (!is_array($data)){

return false;

}

if (is_null($return_id)){

Self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data)))->execute($db);

true を返します;

}

if (is_string($return_id)){

$id = self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data))." returns ".$return_id)- >実行($db)->get($return_id);

$id を返す;

}else{

if (is_array($return_id)){

$ids = implode(',',$return_id);

$r_ids = self::query(self::SELECT,self::insert($table_name,array_keys($data))->values(array_values($data))." returns ".$ids)- >実行($db)->現在();

$r_ids を返す;

}

}

return false;

}

パブリック静的関数 update_table($table_name,$id,$data,$id_name='id',$db='default'){

if (!is_array($data)){

return false;

}

return self::update($table_name)->set($data)->where($id_name ,'=',$id)->execute($db);

}

public static function quote($s,$db='default'){

if(!is_array($s)){

return Database::instance($db)->quote($s);

}else{ //配列を引用符で囲んで内部分解します

$_qs = array();

foreach ($s として $ele){

$_qs[] = self::quote($ele,$db);

}

$_quoteString = implode(',',$_qs);

$_quoteString を返す;

}

}

public static functionscape($s,$db='default'){

return Database::instance($db)->escape($s);

}

public static function quote_table($s,$db='default'){

return Database::instance($db)->quote_table($s);

}

public static function getConnection($db = 'default'){

return Database::instance($db)->getConnection();

}

public static function getChildren($table,$returnSql = false ,$pid= '0',$idname='id',$pidname='pid' ,$db='default'){

$_sql = 'select * from '.$table.'ここで '.$pidname.'='.self::escape($pid,$db).

" と $idname <>".DB::escape($pid,$db);

if($returnSql){

return $_sql;

}

$_res = self::query(self::SELECT,$_sql)->execute($db)->as_array();

if($_res){

return $_res;

}else{

false を返す;

}

}

/*

*

*/

public static function getTree($tableName,$returnSql=false,$startWith='0',$idCol='id',$pidCol='pid', $orderCol='id', $maxDepth=0,$レベル = 0,$delimiter = ';',$db='デフォルト'){

$_funcParas = array();

$_funcParas[] = self::quote($tableName,$db); //TableView

$_funcParas[] = self::quote($idCol,$db); //ID列

$_funcParas[] = self::quote($pidCol,$db); //親ID列

$_funcParas[] = self::quote($orderCol,$db); //ASC によるデフォルトの順序

$_funcParas[] = self::quote($startWith,$db); //NODE を開始

$_funcParas[] = self::quote($maxDepth,$db); // トラバース深度の開始

$_funcParas[] = self::quote($delimiter,$db); //区切り文字、デフォルト ';'

$_sql = 'select * from connectby('

.implode(',',$_funcParas).')'

。 as t(id int, pid int, level int, ブランチテキスト, pos int)';

if($level > 0){

$_sql .= ' where level >='.self::quote($level);

}

if($returnSql) return $_sql;

$_res = self::query(self::SELECT,$_sql,true)->execute($db)->as_array();

if($_res){

return $_res;

}else{

false を返す;

}

}

public static function begin($db='default'){

DB::query(Database::UPDATE, "BEGIN")->execute($db);

}

public static function commit($db='default'){

DB::query(Database::UPDATE, "COMMIT")->execute($db);

}

public static function rollback($db='default'){

DB::query(Database::UPDATE, "ROLLBACK")->execute($db);

}

/**

* 指定されたタイプの新しい [Database_Query] を作成します。

*

* // 新しい SELECT クエリを作成します

* $query = DB::query(Database::SELECT, 'SELECT * FROM users');

*

* // 新しい DELETE クエリを作成します

* $query = DB::query(Database::DELETE, 'DELETE FROM users WHERE id = 5');

*

* 型を指定すると返される結果が変わります。

を使用する場合

* `Database::SELECT`、[Database_Query_Result] が返されます。

* `Database::INSERT` クエリは挿入 ID と行数を返します。

* 他のすべてのクエリでは、影響を受ける行の数が返されます。

*

* @param 整数型: Database::SELECT、Database::UPDATE など

* @param string SQL ステートメント

* @return Database_Query

  */

public static function query($type, $sql,$as_object = false)

{

return new Database_Query($type, $sql,$as_object);

}

/**

* 新しい[Database_Query_Builder_Select]を作成します。各引数は

となります。

* 列として扱われます。 `foo AS bar` エイリアスを生成するには、配列を使用します。

*

* // ID、ユーザー名を選択します

* $query = DB::select('id', 'username');

*

* // SELECT id AS user_id

* $query = DB::select(array('id', 'user_id'));

*

* @param 混合列名または配列($column, $alias) またはオブジェクト

* @param ...

* @return Database_Query_Builder_Select

  */

public static function select($columns = NULL)

{

return new Database_Query_Builder_Select(func_get_args());

}

/**

* 列の配列から新しい [Database_Query_Builder_Select] を作成します。

*

* // ID、ユーザー名を選択します

* $query = DB::select_array(array('id', 'username'));

*

* @param 選択する配列列

* @return Database_Query_Builder_Select

*/

public static function select_array(array $columns = NULL)

{

return new Database_Query_Builder_Select($columns);

}

/**

* 新しい [Database_Query_Builder_Insert] を作成します。

*

* // INSERT INTO users (id, username)

* $query = DB::insert('users', array('id', 'username'));

*

*

に挿入する @param 文字列テーブル

* @param 列名の配列リスト、array($column, $alias)、object

* @return Database_Query_Builder_Insert

  */

public static function insert($table = NULL, array $columns = NULL)

{

return new Database_Query_Builder_Insert($table, $columns);

}

/**

* 新しい[Database_Query_Builder_Update]を作成します。

*

* // ユーザーを更新します

* $query = DB::update('users');

*

* 更新する @param 文字列テーブル

* @return Database_Query_Builder_Update

  */

public static function update($table = NULL)

{

return new Database_Query_Builder_Update($table);

}

/**

* 新しい [Database_Query_Builder_Delete] を作成します。

*

* // ユーザーから削除

* $query = DB::delete('users');

*

* 削除する @param 文字列テーブル

* @return Database_Query_Builder_Delete

  */

public static function delete($table = NULL)

{

return new Database_Query_Builder_Delete($table);

}

/**

* エスケープされていない新しい [Database_Expression] を作成します。式

* は、クエリ ビルダー内で SQL 関数を使用する唯一の方法です。

*

* $expression = DB::expr('COUNT(users.id)');

*

* @param 文字列式

* @return Database_Expression

*/

public static function expr($string){

return new Database_Expression($string);

}

/*

* ページ分割されたページを取得しています

*/

public static function getPage($_sql,&$page,$orderBy ='updated desc', $dataPro='data',$pagePro = 'pagination',

$config = NULL,$db = 'default',$as_object= true){

$_csql = 'select count(1) as c from ('.$_sql.') st';

$_c = DB::query(DB::SELECT,$_csql)->execute($db)->get('c');

if($config){

$config['total_items'] = $_c;

$_pagination = new Pagination($config);

}else{

$config = array();

$config['total_items'] = $_c;

$_pagination = new Pagination($config);

}

$_sql .= ' order by '.$orderBy;

if($_pagination->offset){

$_sql .= ' offset '.$_pagination->offset;

}

$_sql .= '制限'.$_pagination->items_per_page;

$_data = DB::query(DB::SELECT,$_sql,$as_object)->execute($db)->as_array();

if(!$_data){

$page->{$dataPro} = false;

$page->{$pagePro} = false;

false を返す;

}

$page->{$dataPro} = $_data;

$page->{$pagePro} = $_pagination;

true を返します;

}

/*

* すべてのロールを取得

* スタートを制御するレベル

*/

public static function getRoleTreeSql($role_id,$quote = false,$role_table,$level=0,$db='default'){

$_sql = 'select id from ('.self::getTree($role_table,true,$role_id,'id','pid','id',

0, //Max Depth

$level, //レベル

';',$db).') utree';

if(!$quote) return $_sql;

else return '('.$_sql.')';

}

/*

* オブジェクト認可に関するサブクエリを返します

* 子ロールオブジェクトと所有オブジェクト

* 親コントロール

*/

public static function getCURTreeSql($role_id,$user_id,$role_table,$quote = true,

$role='role_id',$owner = 'owner_id' ,$db='default'){

$_sql = ' '.$role.' '.self::getRoleTreeSql($role_id,true,$role_table,

) で

1, //レベルは 1 から始まります

$db)。 ' または '.$owner.'='.DB::quote($user_id);

if(!$quote) return $_sql;

else return '('.$_sql.')';

}

}



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!