• Main Page
  • Data Structures
  • Files
  • File List

sybaseStatement.php

Go to the documentation of this file.
00001 <?php
00002 
00003 require 'sybaseResultset.php';
00004 
00005 /**
00006  * Sybase ASE 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: sybaseStatement.php,v 1.5 2008-01-19 10:28:58-05 mt_jordan Exp $
00015  */
00016 
00017 class sybaseStatement
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 public
00059      * @var    string
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     public 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     public 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 = str_replace( "'", "''", $param );
00096             $param = "'" . $param . "'";
00097         }
00098 
00099         $this->objParameters[] = $param;
00100     }
00101 
00102     /**
00103      * Execute prepared statement and return resultset methods
00104      *
00105      * @access public
00106      * @return mixed
00107      */
00108     public function execute()
00109     {
00110         $objResult = sybase_query( $this->objPrepareSQL(), $this->objConnection->connection() )
00111         or trigger_error( sybase_get_last_message(), E_USER_WARNING );
00112 
00113         return new sybaseResultset( $objResult, $this->objConnection->connection() );
00114     }
00115 
00116     /**
00117      * Set limit int value
00118      *
00119      * @access public
00120      * @param  int $limit
00121      */
00122     public function limit( $limit )
00123     {
00124         //make sure $limit is an unsigned int > 0
00125         $this->objLimit = ( is_numeric( $limit ) && $limit > 0 ) ? ( int )$limit : 1;
00126     }
00127 
00128     /**
00129      * Execute non-prepared query and return resultset methods
00130      *
00131      * @access public
00132      * @return mixed
00133      */
00134     public function objExecuteNonPrepared()
00135     {
00136         $objResult = sybase_query( $this->objQuery, $this->objConnection->connection() )
00137         or trigger_error( sybase_get_last_message(), E_USER_WARNING );
00138 
00139         return new sybaseResultset( $objResult, $this->objConnection->connection() );
00140     }
00141 
00142     /**
00143      * Prepare query string and bind parameters
00144      *
00145      * @access private
00146      * @return string
00147      */
00148     private function objPrepareSQL()
00149     {
00150         $objSqlParts = explode( '?', $this->objQuery );
00151         $objQuery = $objSqlParts[0];
00152 
00153         for ( $i = 1; $i < count( $objSqlParts ); $i++ )
00154             $objQuery .= $this->objParameters[$i - 1] . $objSqlParts[$i];
00155 
00156         $objQuery = ( $this->objLimit ) ? str_ireplace( ':limit', $this->objLimit, $objQuery ) : $objQuery;
00157         $objQuery = ( $this->objOffset ) ? str_ireplace( ':offset', $this->objOffset, $objQuery ) : $objQuery;
00158 
00159         return $objQuery;
00160     }
00161 
00162     /**
00163      * Set offset int value
00164      *
00165      * @access public
00166      * @param  int $offset
00167      */
00168     public function offset( $offset )
00169     {
00170         //make sure $offset is an unsigned int > 0
00171         $this->objOffset = ( is_numeric( $offset ) && $offset > 0 ) ? ( int )$offset : 1;
00172     }
00173 
00174     /**
00175      * Dummy method to prevent class error for dbs that do not support sequences - used with prepared statement
00176      *
00177      * @access public
00178      */
00179     public function sequence() {}
00180 }
00181 
00182 ?>

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