• Main Page
  • Data Structures
  • Files
  • File List

mysqlStatement.php

Go to the documentation of this file.
00001 <?php
00002 
00003 include_once 'mysqlResultset.php';
00004 
00005 /**
00006  * MySQL query statement class
00007  *
00008  * @package objSQL
00009  * @version 2.1.0
00010  * @author MT Jordan <mtjo62@gmail.com>
00011  * @link http://objsql.sourceforge.net
00012  * @copyright 2004-2010 openSource Partners
00013  * @license LGPL
00014  * @revision $Id: mysqlStatement.php,v 1.5 2008-01-19 15:16:18-05 mt_jordan Exp $
00015  */
00016 
00017 class mysqlStatement
00018 {
00019     /**********************************************
00020      * Internal variables
00021      *********************************************/
00022 
00023     /**
00024      * Database connection object
00025      *
00026      * @access private
00027      * @var    mixed
00028      */
00029     private $objConnection;
00030 
00031     /**
00032      * Select query limit value
00033      *
00034      * @access private
00035      * @var    int
00036      */
00037     private $objLimit = false;
00038 
00039     /**
00040      * Select query offset value
00041      *
00042      * @access private
00043      * @var    int
00044      */
00045     private $objOffset = false;
00046 
00047     /**
00048      * Prepared statement binding parameters
00049      *
00050      * @access private
00051      * @var    array
00052      */
00053     private $objParameters = array();
00054 
00055     /**
00056      * Query string
00057      *
00058      * @access private
00059      * @var    str
00060      */
00061     private $objQuery;
00062 
00063     /**********************************************
00064      * Class methods
00065      *********************************************/
00066 
00067     /**
00068      * Constructor
00069      *
00070      * @access public
00071      * @param  str   $query
00072      * @param  mixed $connection
00073      */
00074     function __construct( $query, $connection )
00075     {
00076         $this->objConnection = $connection;
00077         $this->objQuery      = $query;
00078     }
00079 
00080     /**
00081      * Escape query parameters
00082      *
00083      * @access public
00084      * @param  mixed $param
00085      * @param  bool  $no_quotes
00086      */
00087     function bind( $param, $no_quotes=false )
00088     {
00089         //if $param is numeric str, do not add quotes
00090         if ( ( is_string( $param ) && !is_numeric( $param ) ) && !$no_quotes )
00091         {
00092             if ( get_magic_quotes_gpc() )
00093                 $param = stripslashes( $param );
00094 
00095             $param = "'" . mysqli_real_escape_string( $this->objConnection->connection(), $param ) . "'";
00096         }
00097 
00098         $this->objParameters[] = $param;
00099     }
00100 
00101     /**
00102      * Execute prepared statement and return resultset object
00103      *
00104      * @access public
00105      * @return mixed
00106      */
00107     public function execute()
00108     {
00109         $objResult = mysqli_query( $this->objConnection->connection(), $this->objPrepareSQL() )
00110         or trigger_error( mysqli_error( $this->objConnection->connection() ), E_USER_WARNING );
00111 
00112         return new mysqlResultset( $objResult, $this->objConnection->connection() );
00113     }
00114 
00115     /**
00116      * Set limit int value
00117      *
00118      * @access public
00119      * @param  int $limit
00120      */
00121     public function limit( $limit )
00122     {
00123         //make sure $limit is an unsigned int > 0
00124         $this->objLimit = ( is_numeric( $limit ) && $limit > 0 ) ? ( int )$limit : 1;
00125     }
00126 
00127     /**
00128      * Execute non-prepared query and return resultset object
00129      *
00130      * @access public
00131      * @return mixed
00132      */
00133     public function objExecuteNonPrepared()
00134     {
00135         $objResult = mysqli_query( $this->objConnection->connection(), $this->objQuery )
00136         or trigger_error( mysqli_error( $this->objConnection->connection() ), E_USER_WARNING );
00137 
00138         return new mysqlResultset( $objResult, $this->objConnection->connection() );
00139     }
00140 
00141     /**
00142      * Prepare query string and bind parameters
00143      *
00144      * @access private
00145      * @return str
00146      */
00147     private function objPrepareSQL()
00148     {
00149         $objSqlParts = explode( '?', $this->objQuery );
00150         $objQuery = $objSqlParts[0];
00151 
00152         for ( $i = 1; $i < count( $objSqlParts ); $i++ )
00153             $objQuery .= $this->objParameters[$i - 1] . $objSqlParts[$i];
00154 
00155         $objQuery = ( $this->objLimit ) ? str_ireplace( ':limit', $this->objLimit, $objQuery ) : $objQuery;
00156         $objQuery = ( $this->objOffset ) ? str_ireplace( ':offset', $this->objOffset, $objQuery ) : $objQuery;
00157 
00158         return $objQuery;
00159     }
00160 
00161     /**
00162      * Set offset int value
00163      *
00164      * @access public
00165      * @param  int $offset
00166      */
00167     public function offset( $offset )
00168     {
00169         //make sure $offset is an unsigned int > 0
00170         $this->objOffset = ( is_numeric( $offset ) && $offset > 0 ) ? ( int )$offset : 1;
00171     }
00172 
00173     /**
00174      * Dummy method to prevent class error for dbs that do not support sequences - used with prepared statement
00175      *
00176      * @access public
00177      */
00178     public function sequence() {}
00179 }
00180 
00181 ?>

Generated on Sat Jul 10 2010 15:14:39 for objSQL 2.1.0 by  doxygen 1.7.1