ホームページ php教程 php手册 素晴らしい MySQL クラス

素晴らしい MySQL クラス

Jun 21, 2016 am 08:51 AM
database query return select

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.')';

}

}



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

discuzデータベースエラーを解決する方法 discuzデータベースエラーを解決する方法 Nov 20, 2023 am 10:10 AM

discuz データベース エラーの解決策は次のとおりです: 1. データベース構成を確認します; 2. データベース サーバーが実行されていることを確認します; 3. データベース テーブルのステータスを確認します; 4. データをバックアップします; 5. キャッシュをクリアします; 6. Discuz を再インストールします; 7. サーバー リソースを確認します。 ; 8. Discuz 公式サポートに連絡します。 Discuz データベース エラーを解決するには、複数の側面から始めて、徐々に問題の原因を調査し、対応する措置を講じて修復する必要があります。

リークにより、Intel Arrow Lake-U、-H、-HX、-S の主要な仕様が明らかに リークにより、Intel Arrow Lake-U、-H、-HX、-S の主要な仕様が明らかに Jun 15, 2024 pm 09:49 PM

IntelArrowLake は、LunarLake と同じプロセッサ アーキテクチャに基づいていると予想されており、つまり、Intel の新しい Lion Cove パフォーマンス コアが経済的な Skymont 効率コアと組み合わされることになります。

C言語のreturnの使い方を詳しく解説 C言語のreturnの使い方を詳しく解説 Oct 07, 2023 am 10:58 AM

C 言語における return の使い方は、 1. 戻り値の型が void の関数については、return 文を使用して関数の実行を早期に終了することができます; 2. 戻り値の型が void ではない関数については、 return ステートメントは、関数の実行を終了するためのものです。結果は呼び出し元に返されます。 3. 関数の実行を早期に終了します。関数内で return ステートメントを使用して、関数の実行を早期に終了することもできます。関数が値を返さない場合。

Javaのreturn文とfinally文の実行順序は何ですか? Javaのreturn文とfinally文の実行順序は何ですか? Apr 25, 2023 pm 07:55 PM

ソースコード: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}#出力 上記のコードの出力は、単純に次のように結論付けることができます:finally の前に return が実行されます。バイトコード レベルで何が起こるかを見てみましょう。以下は、case1 メソッドのバイトコードの一部をインターセプトし、ソース コードを比較して、各命令の意味に注釈を付けます。

Select Channels Goの非同期処理方法 golangを使った並行プログラミング Select Channels Goの非同期処理方法 golangを使った並行プログラミング Sep 28, 2023 pm 05:27 PM

golang を使用した SelectChannelsGo 同時プログラミングの非同期処理方法 はじめに: 同時プログラミングは、アプリケーションのパフォーマンスと応答性を効果的に向上させることができる、現代のソフトウェア開発における重要な領域です。 Go 言語では、Channel と Select ステートメントを使用して同時プログラミングを簡単かつ効率的に実装できます。この記事では、SelectChannelsGo 同時プログラミングの非同期処理メソッドに golang を使用する方法を紹介し、具体的な方法を提供します。

jqueryでselect要素を非表示にする方法 jqueryでselect要素を非表示にする方法 Aug 15, 2023 pm 01:56 PM

jquery で select 要素を非表示にする方法: 1. hide() メソッド。jQuery ライブラリを HTML ページに導入します。さまざまなセレクターを使用して select 要素を非表示にできます。ID セレクターは、selectId を選択した select 要素の ID に置き換えます。実際に使用する; 2. css() メソッド、ID セレクターを使用して非表示にする必要がある select 要素を選択し、css() メソッドを使用して表示属性を none に設定し、selectId を select 要素の ID に置き換えます。

Power Query で複数の列をドラッグ アンド ドロップで並べ替える方法 Power Query で複数の列をドラッグ アンド ドロップで並べ替える方法 Mar 14, 2024 am 10:55 AM

この記事では、PowerQuery で複数の列をドラッグ アンド ドロップで並べ替える方法を説明します。さまざまなソースからデータをインポートする場合、列が希望の順序にならないことがよくあります。列の順序を変更すると、分析やレポートのニーズに合った論理的な順序で列を配置できるだけでなく、データの読みやすさが向上し、フィルタリング、並べ替え、計算の実行などのタスクが高速化されます。 Excelで複数の列を並べ替えるにはどうすればよいですか? Excel で列を再配置する方法はたくさんあります。列ヘッダーを選択し、目的の場所にドラッグするだけです。ただし、多くの列を含む大きなテーブルを扱う場合、このアプローチは面倒になる可能性があります。列をより効率的に再配置するには、拡張されたクエリ エディターを使用できます。クエリの強化

jQueryで選択要素の変更イベントバインディングを実装する方法 jQueryで選択要素の変更イベントバインディングを実装する方法 Feb 23, 2024 pm 01:12 PM

jQuery は、DOM 操作、イベント処理、アニメーション効果などを簡素化するために使用できる人気のある JavaScript ライブラリです。 Web 開発では、選択した要素のイベント バインディングを変更する必要がある状況によく遭遇します。この記事では、jQuery を使用して選択要素変更イベントをバインドする方法を紹介し、具体的なコード例を示します。まず、ラベルを使用してオプションを含むドロップダウン メニューを作成する必要があります。

See all articles