PHP实现的通过参数生成MYSQL语句类完整实例

5年以前  |  阅读数:793 次  |  编程语言:PHP 

本文实例讲述了PHP实现的通过参数生成MYSQL语句类。分享给大家供大家参考,具体如下:

这个类可以通过指定的表和字段参数创建SELECT ,INSERT , UPDATE 和 DELETE 语句。

这个类可以创建SQL语句的WHERE条件,像LIKE的查询语句,使用LEFT JOIN和ORDER 语句


    <?php
     /* *******************************************************************
    Example file
    This example shows how to use the MyLibSQLGen class
    The example is based on the following MySQL table:
    CREATE TABLE customer (
     id int(10) unsigned NOT NULL auto_increment,
     name varchar(60) NOT NULL default '',
     address varchar(60) NOT NULL default '',
     city varchar(60) NOT NULL default '',
     PRIMARY KEY (cust_id)
    ) TYPE=MyISAM;
    ******************************************************************* */ 
     require_once ( " class_mylib_SQLGen-1.0.php " );
     $fields = Array ( " name " , " address " , " city " );
     $values = Array ( " Fadjar " , " Resultmang Raya Street " , " Jakarta " );
     $tables = Array ( " customer " );
     echo  " <b>Result Generate Insert</b><br> " ;
     $object = new MyLibSQLGen();
     $object -> clear_all_assign(); // to refresh all property but it no need when first time execute 
     $object -> setFields( $fields );
     $object -> setValues( $values );
     $object -> setTables( $tables );
     if ( ! $object -> getInsertSQL()){ echo  $object -> Error; exit ;}
     else { $sql = $object -> Result; echo  $sql . " <br> " ;}
     echo  " <b>Result Generate Update</b><br> " ;
     $fields = Array ( " name " , " address " , " city " );
     $values = Array ( " Fadjar " , " Resultmang Raya Street " , " Jakarta " );
     $tables = Array ( " customer " );
     $id = 1 ;
     $conditions [ 0 ][ " condition " ] = " id='$id' " ;
     $conditions [ 0 ][ " connection " ] = "" ;
     $object -> clear_all_assign();
     $object -> setFields( $fields );
     $object -> setValues( $values );
     $object -> setTables( $tables );
     $object -> setConditions( $conditions );
     if ( ! $object -> getUpdateSQL()){ echo  $object -> Error; exit ;}
     else { $sql = $object -> Result; echo  $sql . " <br> " ;}
     echo  " <b>Result Generate Delete</b><br> " ;
     $tables = Array ( " customer " );
     $conditions [ 0 ][ " condition " ] = " id='1' " ;
     $conditions [ 0 ][ " connection " ] = " OR " ;
     $conditions [ 1 ][ " condition " ] = " id='2' " ;
     $conditions [ 1 ][ " connection " ] = " OR " ;
     $conditions [ 2 ][ " condition " ] = " id='4' " ;
     $conditions [ 2 ][ " connection " ] = "" ;
     $object -> clear_all_assign();
     $object -> setTables( $tables );
     $object -> setConditions( $conditions );
     if ( ! $object -> getDeleteSQL()){ echo  $object -> Error; exit ;}
     else { $sql = $object -> Result; echo  $sql . " <br> " ;}
     echo  " <b>Result Generate List</b><br> " ;
     $fields = Array ( " id " , " name " , " address " , " city " );
     $tables = Array ( " customer " );
     $id = 1 ;
     $conditions [ 0 ][ " condition " ] = " id='$id' " ;
     $conditions [ 0 ][ " connection " ] = "" ;
     $object -> clear_all_assign();
     $object -> setFields( $fields );
     $object -> setTables( $tables );
     $object -> setConditions( $conditions );
     if ( ! $object -> getQuerySQL()){ echo  $object -> Error; exit ;}
     else { $sql = $object -> Result; echo  $sql . " <br> " ;}
     echo  " <b>Result Generate List with search on all fields</b><br> " ;
     $fields = Array ( " id " , " name " , " address " , " city " );
     $tables = Array ( " customer " );
     $id = 1 ;
     $search = " Fadjar Nurswanto " ;
     $object -> clear_all_assign();
     $object -> setFields( $fields );
     $object -> setTables( $tables );
     $object -> setSearch( $search );
     if ( ! $object -> getQuerySQL()){ echo  $object -> Error; exit ;}
     else { $sql = $object -> Result; echo  $sql . " <br> " ;}
     echo  " <b>Result Generate List with search on some fields</b><br> " ;
     $fields = Array ( " id " , " name " , " address " , " city " );
     $tables = Array ( " customer " );
     $id = 1 ;
     $search = Array (
           " name " => " Fadjar Nurswanto " , 
           " address " => " Tomang Raya " 
        );
     $object -> clear_all_assign();
     $object -> setFields( $fields );
     $object -> setTables( $tables );
     $object -> setSearch( $search );
     if ( ! $object -> getQuerySQL()){ echo  $object -> Error; exit ;}
     else { $sql = $object -> Result; echo  $sql . " <br> " ;}
    ?> 

类代码:


    <?php
     /* 
    Created By    : Fadjar Nurswanto <fajr_n@rindudendam.net>
    DATE      : 2006-08-02
    PRODUCTNAME    : class MyLibSQLGen
    PRODUCTVERSION  : 1.0.0
    DESCRIPTION    : class yang berfungsi untuk menggenerate SQL
    DENPENCIES    :
     */ 
     class MyLibSQLGen
    {
       var  $Result ;
       var  $Tables = Array ();
       var  $Values = Array ();
       var  $Fields = Array ();
       var  $Conditions = Array ();
       var  $Condition ;
       var  $LeftJoin = Array ();
       var  $Search ;
       var  $Sort = " ASC " ;
       var  $Order ;
       var  $Error ;
       function MyLibSQLGen(){}
       function BuildCondition()
      {
         $funct = " BuildCondition " ;
         $className = get_class ( $this );
         $conditions = $this -> getConditions();
         if ( ! $conditions ){ $this -> dbgDone( $funct ); return  true ;}
         if ( ! is_array ( $conditions ))
        {
           $this -> Error = " $className::$funct Variable conditions not Array " ;
           return ;
        }
         for ( $i = 0 ; $i < count ( $conditions ); $i ++ )
        {
           $this -> Condition .= $conditions [ $i ][ " condition " ] . "  " . $conditions [ $i ][ " connection " ] . "  " ;
        }
         return  true ;
      }
       function BuildLeftJoin()
      {
         $funct = " BuildLeftJoin " ;
         $className = get_class ( $this );
         if ( ! $this -> getLeftJoin()){ $this -> Error = " $className::$funct Property LeftJoin was empty " ; return ;}
         $LeftJoinVars = $this -> getLeftJoin();
         $hasil = false ;
         foreach ( $LeftJoinVars  as  $LeftJoinVar )
        {
          @ $hasil .= " LEFT JOIN " . $LeftJoinVar [ " table " ];
           foreach ( $LeftJoinVar [ " on " ] as  $var )
          {
            @ $condvar .= $var [ " condition " ] . "  " . $var [ " connection " ] . "  " ;
          }
           $hasil .= " ON ( " . $condvar . " ) " ;
           unset ( $condvar );
        }
         $this -> ResultLeftJoin = $hasil ;
         return  true ;
      }
       function BuildOrder()
      {
         $funct = " BuildOrder " ;
         $className = get_class ( $this );
         if ( ! $this -> getOrder()){ $this -> Error = " $className::$funct Property Order was empty " ; return ;}
         if ( ! $this -> getFields()){ $this -> Error = " $className::$funct Property Fields was empty " ; return ;}
         $Fields = $this -> getFields();
         $Orders = $this -> getOrder();
         if ( ereg ( " , " , $Orders )){ $Orders = explode ( " , " , $Order );}
         if ( ! is_array ( $Orders )){ $Orders = Array ( $Orders );}
         foreach ( $Orders  as  $Order )
        {
           if ( ! is_numeric ( $Order )){ $this -> Error = " $className::$funct Property Order not Numeric " ; return ;}
           if ( $Order  >  count ( $this -> Fields)){ $this -> Error = " $className::$funct Max value of property Sort is " . count ( $this -> Fields); return ;}
          @ $xorder .= $Fields [ $Order ] . " , " ;
        }
         $this -> ResultOrder = " ORDER BY " . substr ( $xorder , 0 ,- 1 );
         return  true ;
      }
       function BuildSearch()
      {
         $funct = " BuildSearch " ;
         $className = get_class ( $this );
         if ( ! $this -> getSearch()){ $this -> Error = " $className::$funct Property Search was empty " ; return ;}
         if ( ! $this -> getFields()){ $this -> Error = " $className::$funct Property Fields was empty " ; return ;}
         $Fields = $this -> getFields();
         $xvalue = $this -> getSearch();
         if ( is_array ( $xvalue ))
        {
           foreach ( $Fields  as  $field )
          {
             if (@ $xvalue [ $field ])
            {
               $Values = explode ( "  " , $xvalue [ $field ]);
               foreach ( $Values  as  $Value )
              {
                @ $hasil .= $field . " LIKE '% " . $Value . " %' OR " ;
              }
               if ( $hasil )
              {
                @ $hasil_final .= " ( " . substr ( $hasil , 0 ,- 4 ) . " ) AND " ;
                 unset ( $hasil );
              }
            }
          }
           $hasil = $hasil_final ;
        }
         else 
        {
           foreach ( $Fields  as  $field )
          {
             $Values = explode ( "  " , $xvalue );
             foreach ( $Values  as  $Value )
            {
              @ $hasil .= $field . " LIKE '% " . $Value . " %' OR " ;
            }
          }
        }
         $this -> ResultSearch = substr ( $hasil , 0 ,- 4 );
         return  true ;
      }
       function clear_all_assign()
      {
         $this -> Result = null ;
         $this -> ResultSearch = null ;
         $this -> ResultLeftJoin = null ;
         $this -> Result = null ;
         $this -> Tables = Array ();
         $this -> Values = Array ();
         $this -> Fields = Array ();
         $this -> Conditions = Array ();
         $this -> Condition = null ;
         $this -> LeftJoin = Array ();
         $this -> Sort = " ASC " ;
         $this -> Order = null ;
         $this -> Search = null ;
         $this -> fieldSQL = null ;
         $this -> valueSQL = null ;
         $this -> partSQL = null ;
         $this -> Error = null ;
         return  true ;
      }
       function CombineFieldValue( $manual = false )
      {
         $funct = " CombineFieldsPostVar " ;
         $className = get_class ( $this );
         $fields = $this -> getFields();
         $values = $this -> getValues();
         if ( ! is_array ( $fields ))
        {
           $this -> Error = " $className::$funct Variable fields not Array " ;
           return ;
        }
         if ( ! is_array ( $values ))
        {
           $this -> Error = " $className::$funct Variable values not Array " ;
           return ;
        }
         if ( count ( $fields ) != count ( $values ))
        {
           $this -> Error = " $className::$funct Count of fields and values not match " ;
           return ;
        }
         for ( $i = 0 ; $i < count ( $fields ); $i ++ )
        {
          @ $this -> fieldSQL .= $fields [ $i ] . " , " ;
           if ( $fields [ $i ] ==  " pwd "  ||  $fields [ $i ] ==  " password "  ||  $fields [ $i ] ==  " pwd " )
          {
            @ $this -> valueSQL .= " password(' " . $values [ $i ] . " '), " ;
            @ $this -> partSQL .= $fields [ $i ] . " =password(' " . $values [ $i ] . " '), " ;
          }
           else 
          {
             if ( is_numeric ( $values [ $i ]))
            {
              @ $this -> valueSQL .= $values [ $i ] . " , " ;
              @ $this -> partSQL .= $fields [ $i ] . " = " . $values [ $i ] . " , " ;
            }
             else 
            {
              @ $this -> valueSQL .= " ' " . $values [ $i ] . " ', " ;
              @ $this -> partSQL .= $fields [ $i ] . " =' " . $values [ $i ] . " ', " ;
            }
          }
        }
         $this -> fieldSQL = substr ( $this -> fieldSQL , 0 ,- 1 );
         $this -> valueSQL = substr ( $this -> valueSQL , 0 ,- 1 );
         $this -> partSQL = substr ( $this -> partSQL , 0 ,- 1 );
         return  true ;
      }
       function getDeleteSQL()
      {
         $funct = " getDeleteSQL " ;
         $className = get_class ( $this );
         $Tables = $this -> getTables();
         if ( ! $Tables  ||  ! count ( $Tables ))
        {
           $this -> dbgFailed( $funct );
           $this -> Error = " $className::$funct Table was empty " ;
           return ;
        }
         for ( $i = 0 ; $i < count ( $Tables ); $i ++ )
        {
          @ $Table .= $Tables [ $i ] . " , " ;
        }
         $Table = substr ( $Table , 0 ,- 1 );
         $sql = " DELETE FROM " . $Table ;
         if ( $this -> getConditions())
        {
           if ( ! $this -> BuildCondition()){ $this -> dbgFailed( $funct ); return ;}
           $sql .= " WHERE " . $this -> getCondition();
        }
         $this -> Result = $sql ;
         return  true ;
      }
       function getInsertSQL()
      {
         $funct = " getInsertSQL " ;
         $className = get_class ( $this );
         if ( ! $this -> getValues()){ $this -> Error = " $className::$funct Property Values was empty " ; return ;}
         if ( ! $this -> getFields()){ $this -> Error = " $className::$funct Property Fields was empty " ; return ;}
         if ( ! $this -> getTables()){ $this -> Error = " $className::$funct Property Tables was empty " ; return ;}
         if ( ! $this -> CombineFieldValue()){ $this -> dbgFailed( $funct ); return ;}
         $Tables = $this -> getTables();
         $sql = " INSERT INTO " . $Tables [ 0 ] . " ( " . $this -> fieldSQL . " ) VALUES ( " . $this -> valueSQL . " ) " ;
         $this -> Result = $sql ;
         return  true ;
      }
       function getUpdateSQL()
      {
         $funct = " getUpdateSQL " ;
         $className = get_class ( $this );
         if ( ! $this -> getValues()){ $this -> Error = " $className::$funct Property Values was empty " ; return ;}
         if ( ! $this -> getFields()){ $this -> Error = " $className::$funct Property Fields was empty " ; return ;}
         if ( ! $this -> getTables()){ $this -> Error = " $className::$funct Property Tables was empty " ; return ;}
         if ( ! $this -> CombineFieldValue()){ $this -> dbgFailed( $funct ); return ;}
         if ( ! $this -> BuildCondition()){ $this -> dbgFailed( $funct ); return ;}
         $Tables = $this -> getTables();
         $sql = " UPDATE " . $Tables [ 0 ] . " SET " . $this -> partSQL . " WHERE " . $this -> getCondition();
         $this -> Result = $sql ;
         return  true ;
      }
       function getQuerySQL()
      {
         $funct = " getQuerySQL " ;
         $className = get_class ( $this );
         if ( ! $this -> getFields()){ $this -> Error = " $className::$funct Property Fields was empty " ; return ;}
         if ( ! $this -> getTables()){ $this -> Error = " $className::$funct Property Tables was empty " ; return ;}
         $Fields = $this -> getFields();
         $Tables = $this -> getTables();
         foreach ( $Fields  as  $Field ){@ $sql_raw .= $Field . " , " ;}
         foreach ( $Tables  as  $Table ){@ $sql_table .= $Table . " , " ;}
         $this -> Result = " SELECT " . substr ( $sql_raw , 0 ,- 1 ) . " FROM " . substr ( $sql_table , 0 ,- 1 );
         if ( $this -> getLeftJoin())
        {
           if ( ! $this -> BuildLeftJoins()){ $this -> dbgFailed( $funct ); return ;}
           $this -> Result .= "  " . $this -> ResultLeftJoin;
        }
         if ( $this -> getConditions())
        {
           if ( ! $this -> BuildCondition()){ $this -> dbgFailed( $funct ); return ;}
           $this -> Result .= " WHERE ( " . $this -> Condition . " ) " ;
        }
         if ( $this -> getSearch())
        {
           if ( ! $this -> BuildSearch()){ $this -> dbgFailed( $funct ); return ;}
           if ( $this -> ResultSearch)
          {
             if ( eregi ( " WHERE " , $this -> Result)){ $this -> Result .= " AND " . $this -> ResultSearch;}
             else { $this -> Result .= " WHERE " . $this -> ResultSearch;}
          }
        }
         if ( $this -> getOrder())
        {
           if ( ! $this -> BuildOrder()){ $this -> dbgFailed( $funct ); return ;}
           $this -> Result .= "  " . $this -> ResultOrder;
        }
         if ( $this -> getSort())
        {
           if (@ $this -> ResultOrder)
          {
             $this -> Result .= "  " . $this -> getSort();
          }
        }
         return  true ;
      }
       function getCondition(){ return @ $this -> Condition;}
       function getConditions(){ if ( count (@ $this -> Conditions) &&  is_array (@ $this -> Conditions)){ return @ $this -> Conditions;}}
       function getFields(){ if ( count (@ $this -> Fields) &&  is_array (@ $this -> Fields)){ return @ $this -> Fields;}}
       function getLeftJoin(){ if ( count (@ $this -> LeftJoin) &&  is_array (@ $this -> LeftJoin)){ return @ $this -> LeftJoin;}}
       function getOrder(){ return @ $this -> Order;}
       function getSearch(){ return @ $this -> Search;}
       function getSort(){ return @ $this -> Sort ;}
       function getTables(){ if ( count (@ $this -> Tables) &&  is_array (@ $this -> Tables)){ return @ $this -> Tables;}}
       function getValues(){ if ( count (@ $this -> Values) &&  is_array (@ $this -> Values)){ return @ $this -> Values;}}
       function setCondition( $input ){ $this -> Condition = $input ;}
       function setConditions( $input )
      {
         if ( is_array ( $input )){ $this -> Conditions = $input ;}
         else { $this -> Error = get_class ( $this ) . " ::setConditions Parameter input not array " ; return ;}
      }
       function setFields( $input )
      {
         if ( is_array ( $input )){ $this -> Fields = $input ;}
         else { $this -> Error = get_class ( $this ) . " ::setFields Parameter input not array " ; return ;}
      }
       function setLeftJoin( $input )
      {
         if ( is_array ( $input )){ $this -> LeftJoin = $input ;}
         else { $this -> Error = get_class ( $this ) . " ::setFields Parameter input not array " ; return ;}
      }
       function setOrder( $input ){ $this -> Order = $input ;}
       function setSearch( $input ){ $this -> Search = $input ;}
       function setSort( $input ){ $this -> Sort = $input ;}
       function setTables( $input )
      {
         if ( is_array ( $input )){ $this -> Tables = $input ;}
         else { $this -> Error = get_class ( $this ) . " ::setTables Parameter input not array " ; return ;}
      }
       function setValues( $input )
      {
         if ( is_array ( $input )){ $this -> Values = $input ;}
         else { $this -> Error = get_class ( $this ) . " ::setValues Parameter input not array " ; return ;}
      }
    }
    ?> 

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP基于pdo操作数据库技巧总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php操作office文档技巧总结(包括word,excel,access,ppt)》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例