ホームページ  >  記事  >  php教程  >  PHP の例: PHP はパラメータを通じて MYSQL ステートメント クラスを生成します

PHP の例: PHP はパラメータを通じて MYSQL ステートメント クラスを生成します

WBOY
WBOYオリジナル
2016-06-21 08:51:08866ブラウズ

このクラスは、パラメータを含む配列から MySQL クエリ ステートメントを構築できます。
このクラスは、テーブルとフィールドのパラメーターを指定することで、SELECT、INSERT、UPDATE、および DELETE ステートメントを作成できます。
このクラスは、LEFT JOIN および ORDER ステートメントを使用して、LIKE クエリ ステートメントのような SQL ステートメントの WHERE 条件を作成できます。
例:


php
/* *********************************************** *******************
サンプル ファイル
この例は、MyLibSQLGen クラス
の使用方法を示しています。
この例は、次の MySQL テーブルに基づいています:

CREATE TABLE 顧客 (
id int(10) unsigned NOT NULL auto_increment,
name varchar(60) NOT NULL デフォルト ”,
address varchar(60) NOT NULL デフォルト ”,
city varchar(60) NOT NULL デフォルト ”,
主キー (cust_id)
) TYPE=MyISAM; 

************************************************* ***************** */

require_once ( ” class_mylib_SQLGen-1.0.php ” ); 

フィールド = 配列 (「名前」、「住所」、「都市」); 
値 = Array ( ” Fadjar ” , ” Resultmang Raya Street ” , ” Jakarta ” ); 
tables = Array ( ” customer ” ); 

echo ” 結果生成挿入
” ; 
オブジェクト = 新しい MyLibSQLGen(); 
オブジェクト -> clear_all_assign(); // すべてのプロパティを更新しますが、初回実行時には必要ありません
オブジェクト -> setFields( フィールド ); 
オブジェクト -> setValues( 値 ); 
オブジェクト -> setTables( テーブル ); 

if ( ! オブジェクト -> getInsertSQL()){ エコー オブジェクト ->エラー;終了 ;}
else { sql = オブジェクト ->結果;エコーSQL 。 ”
” ;}


echo ” 結果生成更新
” ; 
フィールド = 配列 (「名前」、「住所」、「都市」); 
値 = Array ( ” Fadjar ” , ” Resultmang Raya Street ” , ” Jakarta ” ); 
tables = Array ( ” customer ” ); 
id = 1 ; 
条件 [ 0 ][ " 条件 " ] = ” id=’id’ ” ; 
条件 [ 0 ][ " 接続 " ] = "" ; 

オブジェクト -> clear_all_assign(); 
オブジェクト -> setFields( フィールド ); 
オブジェクト -> setValues( 値 ); 
オブジェクト -> setTables( テーブル ); 
オブジェクト -> setConditions( 条件 ); 

if ( ! オブジェクト -> getUpdateSQL()){ エコー オブジェクト ->エラー;終了 ;}
else { sql = オブジェクト ->結果;エコーSQL 。 ”
” ;}

echo ” 結果生成削除
” ; 
tables = Array ( ” customer ” ); 
条件 [ 0 ][ " 条件 " ] = ” id='1' ” ; 
条件 [ 0 ][ " 接続 " ] = ” OR ” ; 
条件 [ 1 ][ " 条件 " ] = ” id='2' ” ; 
条件 [1 ][「接続」] = ” OR ” ; 
条件 [ 2 ][ " 条件 " ] = " id='4' " ; 
条件 [ 2 ][ " 接続 " ] = "" ; 

オブジェクト -> clear_all_assign(); 
オブジェクト -> setTables( テーブル ); 
オブジェクト -> setConditions( 条件 ); 

if ( ! オブジェクト -> getDeleteSQL()){ エコー オブジェクト ->エラー;終了 ;}
else { sql = オブジェクト ->結果;エコーSQL 。 ”
” ;}

echo ” 結果生成リスト
” ; 
フィールド = Array ( ” id ” , ” name ” , ” address ” , ” city ” ); 
tables = Array ( ” customer ” ); 
id = 1 ; 
条件 [ 0 ][ " 条件 " ] = ” id=’id’ ” ; 
条件 [ 0 ][ " 接続 " ] = "" ; 

オブジェクト -> clear_all_assign(); 
オブジェクト -> setFields( フィールド ); 
オブジェクト -> setTables( テーブル ); 
オブジェクト -> setConditions( 条件 ); 

if ( ! オブジェクト -> getQuerySQL()){ エコー オブジェクト ->エラー;終了 ;}
else { sql = オブジェクト ->結果;エコーSQL 。 ”
” ;}

echo ” 結果 すべてのフィールドを検索してリストを生成
” ; 
フィールド = Array ( ” id ” , ” name ” , ” address ” , ” city ” ); 
tables = Array ( ” customer ” ); 
id = 1 ; 
検索 = “ファジャル・ヌルスワント” ; 
オブジェクト -> clear_all_assign(); 
オブジェクト -> setFields( フィールド ); 
オブジェクト -> setTables( テーブル ); 
オブジェクト -> setSearch(検索); 

if ( ! オブジェクト -> getQuerySQL()){ エコー オブジェクト ->エラー;終了 ;}
else { sql = オブジェクト ->結果;エコーSQL 。 ”
” ;}

echo ” 結果 一部のフィールドを検索してリストを生成
” ; 
フィールド = Array ( ” id ” , ” name ” , ” address ” , ” city ” ); 
tables = Array ( ” customer ” ); 
id = 1 ; 
search = 配列 (
「名前」=> 「ファジャル・ヌルスワント」、
「アドレス」=> 「トマン・ラヤ」
); 

オブジェクト -> clear_all_assign(); 
オブジェクト -> setFields( フィールド ); 
オブジェクト -> setTables( テーブル ); 
オブジェクト -> setSearch(検索); 

if ( ! オブジェクト -> getQuerySQL()){ エコー オブジェクト ->エラー;終了 ;}
else { sql = オブジェクト ->結果;エコーSQL 。 ”
” ;}
?> 

格代:
php
/*
作成者: ファジャル・ヌルスワント  
日付: 2006-08-02
PRODUCTNAME : クラス MyLibSQLGen
製品バージョン : 1.0.0
説明 : クラス yang berfungsi untuk menggenerate SQL
デンペンシーズ:
*/
クラス MyLibSQLGen
{
var 結果 ; 
var テーブル = 配列 (); 
var 値 = 配列 (); 
var フィールド = 配列 (); 
var 条件 = 配列 (); 
var 条件 ; 
var LeftJoin = 配列 (); 
var 検索 ; 
var ソート = ” ASC ” ; 
var 順序 ; 
var エラー ; 

関数 MyLibSQLGen(){}
関数 BuildCondition()
{
funct = ” BuildCondition ” ; 
className = get_class ( this ); 
条件 = これ -> getConditions(); 
if ( ! 条件 ){ this -> dbgDone(関数); true を返します ;}
if ( ! is_array (条件 ))
{
これ ->エラー = ” className::funct nVariable の条件が配列ではありません ” ; 
戻る ; 
}
for ( i = 0 ; i {
これ ->条件 .= 条件 [ i ][ " 条件 " ] 。 「」。条件 [i][「接続」] 。 ” ” ; 
}
true を返します。 
}
関数 BuildLeftJoin()
{
funct = ” BuildLeftJoin ” ; 
className = get_class ( this ); 
if ( ! this -> getLeftJoin()){ this ->gt;エラー = ” className::funct nProperty LeftJoin が空でした ” ;戻ります ;}

LeftJoinVars = this -> getLeftJoin(); 

ハシル = false ; 
foreach ( LeftJoinVar として LeftJoinVar )
{
@hasil .= “左結合” 。 LeftJoinVar [ "テーブル " ]; 
foreach ( LeftJoinVar [ " on " ] as var )
{
@condvar .= var ["条件" ] . 「」。 var ["接続" ] 。 ” ” ; 
}
hasil .= ” ON ( ” . condvar . ” ) ” ; 
unset ( condvar ); 
}

これ -> ResultLeftJoin = ハシル ; 

true を返します。 
}
関数 BuildOrder()
{
funct = ” BuildOrder ” ; 
className = get_class ( this ); 
if ( ! this -> getOrder()){ this ->エラー = ” className::funct nProperty 注文は空でした ” ;戻ります ;}
if ( ! this -> getFields()){ this ->エラー = ” className::funct nProperty フィールドが空でした ” ;戻ります ;}

フィールド = this -> getFields(); 
注文 = これ -> getOrder(); 
if ( ereg ( ” , ” , Orders )){ Orders =explode ( ” , ” , Orders );}
if ( ! is_array ( Orders )){ Orders = Array ( Orders );}

foreach (注文としての注文)
{
if ( ! is_numeric ( Order )){ this ->エラー = ” className::funct nProperty Order が数値ではありません ” ;戻ります ;}
if ( 順序 > count ( this -> フィールド)){ this ->エラー = ” className::funct nMax プロパティ Sort の値は ” です。 count ( this -> フィールド);戻ります ;}

@ xorder .= フィールド [順序] 。 ” 、 ” ; 
}

これ -> ResultOrder = “ORDER BY” 。 substr ( xorder , 0 ,- 1 ); 

true を返します。 
}
関数 BuildSearch()
{
funct = ” ビルドサーチ ” ; 
className = get_class ( this ); 

if ( ! this -> getSearch()){ this ->エラー = ” className::funct nProperty 検索が空でした ” ;戻ります ;}
if ( ! this -> getFields()){ this ->エラー = ” className::funct nProperty フィールドが空でした ” ;戻ります ;}

フィールド = this -> getFields(); 
xvalue = this -> getSearch(); 

if ( is_array ( xvalue ))
{
foreach (フィールドとしてのフィールド)
{
if (@ xvalue [ フィールド ])
{
値 =explode ( ” ” , xvalue [ field ]); 
foreach (値としての値)
{
@hasil .= フィールド . " のように '% " 。価値 。 " %' または " ; 
}
if (ハシル)
{
@ hasil_final .= ” ( ” . substr ( hasil , 0 ,- 4 ) . ” ) AND ” ; 
設定を解除(ハシル); 
}
}
}
ハシル = ハシル_ファイナル ; 
}
それ以外
{
foreach (フィールドとしてのフィールド)
{
値 =explode ( ” ” , xvalue ); 
foreach (値としての値)
{
@hasil .= フィールド . " のように '% " 。価値 。 " %' または " ; 
}
}
}

これ -> ResultSearch = substr ( hasil , 0 ,- 4 ); 
true を返します。 
}
関数clear_all_assign()
{
これ ->結果 = null ; 
これ ->結果検索 = null ; 
これ -> ResultLeftJoin = null ; 
これ ->結果 = null ; 
これ ->テーブル = 配列 (); 
これ ->値 = 配列 (); 
これ ->フィールド = 配列 (); 
これ ->条件 = 配列 (); 
これ ->条件 = null ; 
これ -> LeftJoin = 配列 (); 
これ ->ソート = “ASC” ; 
これ ->順序 = null ; 
これ ->検索 = null ; 
これ ->フィールドSQL = null ; 
これ ->値SQL = null ; 
これ ->部分SQL = null ; 
これ ->エラー = null ; 
true を返します。 
}
function CombineFieldValue(manual = false )
{
funct = ” CombineFieldsPostVar ” ; 
className = get_class ( this ); 
フィールド = this -> getFields(); 
値 = これ -> getValues(); 
if ( ! is_array (fields ))
{
これ ->エラー = ” className::funct nVariable フィールドが配列ではありません ” ; 
戻る ; 
}
if ( ! is_array (values ))
{
これ ->エラー = ” className::funct nVariable 値が配列ではありません ” ; 
戻る ; 
}
if ( count ( フィールド ) != count ( 値 ))
{
これ ->エラー = ” className::funct nCount のフィールドと値が一致しません ” ; 
戻る ; 
}
for ( i = 0 ; i < count (fields ); i ++ )
{
@これ -> fieldSQL .= フィールド [ i ] 。 ” 、 ” ; 
if ( フィールド [ i ] == ” pwd ” フィールド [ i ] == ” パスワード ” フィールド [ i ] == ” pwd ” )
{
@これ -> valueSQL .= ” パスワード(‘ ” . 値 [ i ] . ” ‘), ” ; 
@これ -> partSQL .= フィールド [ i ] 。 ” =password(‘ ” .values [ i ] .” ‘), ” ; 
}
それ以外
{
if ( is_numeric (values [ i ]))
{
@これ -> valueSQL .= 値 [ i ] 。 ” 、 ” ; 
@これ -> partSQL .= フィールド [ i ] 。 ” = ” 。値 [ i ] 。 ” 、 ” ; 
}
それ以外
{
@これ -> valueSQL .= ” ‘ ” 。値 [ i ] 。 ” ” ; 
@これ -> partSQL .= フィールド [ i ] 。 ” =” 。値 [ i ] 。 ” 、 ” ; 
}
}
}
これ -> fieldSQL = substr ( this -> fieldSQL , 0 ,- 1 ); 
これ -> valueSQL = substr ( this -> valueSQL , 0 ,- 1 ); 
これ -> partSQL = substr ( this ->partSQL , 0 ,- 1 ); 
true を返します。 
}
関数 getDeleteSQL()
{
funct = ” getDeleteSQL ” ; 
className = get_class ( this ); 
テーブル = this -> getTables(); 
if ( ! テーブル ! count ( テーブル ))
{
これ -> dbgFailed(関数); 
これ ->エラー = ” className::funct nTable が空でした ” ; 
戻る ; 
}
for ( i = 0 ; i < count ( Tables ); i ++ )
{
@ Table .= テーブル [ i ] 。 ” 、 ” ; 
}
Table = substr ( Table , 0 ,- 1 ); 

sql = ” から削除” 。テーブル ; 

if ( this -> getConditions())
{
if ( ! this -> BuildCondition()){ this -> dbgFailed(関数);戻ります ;}
SQL .= ” WHERE ” 。これ -> getCondition(); 
}
これ ->結果 = SQL ; 
true を返します。 
}
関数 getInsertSQL()
{
funct = ” getInsertSQL ” ; 
className = get_class ( this ); 
if ( ! this -> getValues()){ this ->エラー = ” className::funct nProperty 値が空でした ” ;戻ります ;}
if ( ! this -> getFields()){ this ->エラー = ” className::funct nProperty フィールドが空でした ” ;戻ります ;}
if ( ! this -> getTables()){ this ->エラー = ” className::funct nProperty テーブルが空でした ” ;戻ります ;}

if ( ! this -> CombineFieldValue()){ this ->gt; dbgFailed(関数);戻ります ;}
テーブル = this -> getTables(); 

sql = “INSERT INTO” 。テーブル [ 0 ] 。 ” (” . this -> fieldSQL . ” ) VALUES ( ” . this -> valueSQL . ” ) ” ; 

これ ->結果 = SQL ; 

true を返します。 
}
関数 getUpdateSQL()
{
funct = ” getUpdateSQL ” ; 
className = get_class ( this ); 

if ( ! this -> getValues()){ this ->エラー = ” className::funct nProperty 値が空でした ” ;戻ります ;}
if ( ! this -> getFields()){ this ->エラー = ” className::funct nProperty フィールドが空でした ” ;戻ります ;}
if ( ! this -> getTables()){ this ->エラー = ” className::funct nProperty テーブルが空でした ” ;戻ります ;}

if ( ! this -> CombineFieldValue()){ this ->gt; dbgFailed(関数);戻ります ;}
if ( ! this -> BuildCondition()){ this -> dbgFailed(関数);戻ります ;}
テーブル = this -> getTables(); 

sql = “更新” 。テーブル [0] 。 " セット " 。これ ->パートSQL 。 " どこ " 。これ -> getCondition(); 

これ ->結果 = SQL ; 

true を返します。 
}
関数 getQuerySQL()
{
funct = ” getQuerySQL ” ; 
className = get_class ( this ); 

if ( ! this -> getFields()){ this ->エラー = ” className::funct nProperty フィールドが空でした ” ;戻ります ;}
if ( ! this -> getTables()){ this ->エラー = ” className::funct nProperty テーブルが空でした ” ;戻ります ;}

フィールド = this -> getFields(); 
テーブル = this -> getTables(); 
foreach (フィールドとしてのフィールド){@ sql_raw .= フィールド . ” , ” ;}
foreach ( Table としてのテーブル){@ sql_table .= Table . ” , ” ;}

これ ->結果 = ” SELECT ” 。 substr ( sql_raw , 0 ,- 1 ) 。 " から " 。 substr ( sql_table , 0 ,- 1 ); 

if ( this -> getLeftJoin())
{
if ( ! this -> BuildLeftJoins()){ this -> dbgFailed(関数);戻ります ;}
これ ->結果 .= ” ” 。これ ->結果左結合; 
}
if ( this -> getConditions())
{
if ( ! this -> BuildCondition()){ this -> dbgFailed(関数);戻ります ;}
これ ->結果 .=” WHERE (” .this -> 条件 .” )” ; 
}
if ( this -> getSearch())
{
if ( ! this -> BuildSearch()){ this -> dbgFailed(関数);戻ります ;}
if ( this -> ResultSearch)
{
if ( eregi ( ” WHERE ” , this -> Result)){ this ->結果 .= ” AND ” 。これ ->結果検索;}
else { this ->結果 .= ” WHERE ” 。これ ->結果検索;}
}
}
if ( this -> getOrder())
{
if ( ! this -> BuildOrder()){ this -> dbgFailed(関数);戻ります ;}
これ ->結果 .= ” ” 。これ ->結果順序; 
}
if ( this -> getSort())
{
if (@ this -> ResultOrder)
{
これ ->結果 .= ” ” 。これ -> getソート(); 
}
}

true を返します。 
}

function getCondition(){ return @ this ->条件;}
function getConditions(){ if ( count (@ this -> 条件) && is_array (@ this -> 条件)){ return @ this ->;条件;}}
function getFields(){ if ( count (@ this -> フィールド) && is_array (@ this -> フィールド)){ return @ this ->フィールド;}}
function getLeftJoin(){ if ( count (@ this -> LeftJoin) && is_array (@ this -> LeftJoin)){ return @ this -> LeftJoin;}}
function getOrder(){ return @ this ->注文;}
function getSearch(){ return @ this ->検索;}
function getSort(){ return @ this ->並べ替え ;}
function getTables(){ if ( count (@ this -> テーブル) && is_array (@ this -> テーブル)){ return @ this ->;テーブル;}}
function getValues(){ if ( count (@ this -> 値) && is_array (@ this -> 値)){ return @ this ->;値;}}

function setCondition( input ){ this ->条件 = 入力 ;}
関数 setConditions( input )
{
if ( is_array ( input )){ this ->条件 = 入力 ;}
else { これ ->エラー = get_class (this) 。 ” ::setConditions nParameter 入力が配列ではありません ” ;戻ります ;}
}
function setFields( input )
{
if ( is_array ( input )){ this ->フィールド = 入力 ;}
else { これ ->エラー = get_class (this) 。 ” ::setFields nParameter 入力が配列ではありません ” ;戻ります ;}
}
function setLeftJoin(input)
{
if ( is_array ( input )){ this -> LeftJoin = 入力 ;}
else { これ ->エラー = get_class (this) 。 ” ::setFields nParameter 入力が配列ではありません ” ;戻ります ;}
}
function setOrder( input ){ this ->gt;注文 = 入力 ;}
function setSearch( input ){ this ->検索 = 入力 ;}
function setSort( input ){ this ->gt;並べ替え = 入力 ;}
function setTables( input )
{
if ( is_array ( input )){ this ->テーブル = 入力 ;}
else { これ ->エラー = get_class (this) 。 ” ::setTables nParameter 入力が配列ではありません ” ;戻ります ;}
}
関数 setValues( input )
{
if ( is_array ( input )){ this ->値 = 入力 ;}
else { これ ->エラー = get_class (this) 。 ” ::setValues nParameter 入力が配列ではありません ” ;戻ります ;}
}
}
?>



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