このクラスは、パラメータを含む配列から 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 入力が配列ではありません ” ;戻ります ;}
}
}
?>