Overview

Packages

  • Auth
  • Config
  • Controller
  • Date
  • Db
  • Feed
    • Abstract
    • Writers
  • File
    • Decorator
  • Form
    • Element
  • Image
  • Log
    • Writer
  • Net
    • Exception
    • REST
  • None
  • PHP
  • PHPMailer
  • Session
  • Util
  • Validate
    • Validator
  • Zend
    • Db
      • Adapter
      • Expr
      • Profiler
      • Select
      • Statement
      • Table
    • Loader
      • Autoloader
      • PluginLoader
    • Registry

Classes

  • Zend_Db_Statement
  • Zend_Db_Statement_Db2
  • Zend_Db_Statement_Mysqli
  • Zend_Db_Statement_Oracle
  • Zend_Db_Statement_Pdo
  • Zend_Db_Statement_Pdo_Ibm
  • Zend_Db_Statement_Pdo_Oci
  • Zend_Db_Statement_Sqlsrv

Interfaces

  • Zend_Db_Statement_Interface

Exceptions

  • Zend_Db_Statement_Db2_Exception
  • Zend_Db_Statement_Exception
  • Zend_Db_Statement_Mysqli_Exception
  • Zend_Db_Statement_Oracle_Exception
  • Zend_Db_Statement_Sqlsrv_Exception
  • Overview
  • Package
  • Class
  • Tree
  1: <?php
  2: /**
  3:  * Zend Framework
  4:  *
  5:  * LICENSE
  6:  *
  7:  * This source file is subject to the new BSD license that is bundled
  8:  * with this package in the file LICENSE.txt.
  9:  * It is also available through the world-wide-web at this URL:
 10:  * http://framework.zend.com/license/new-bsd
 11:  * If you did not receive a copy of the license and are unable to
 12:  * obtain it through the world-wide-web, please send an email
 13:  * to license@zend.com so we can send you a copy immediately.
 14:  *
 15:  * @category   Zend
 16:  * @package    Zend_Db
 17:  * @subpackage Statement
 18:  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 19:  * @license    http://framework.zend.com/license/new-bsd     New BSD License
 20:  * @version    $Id: Mysqli.php 20096 2010-01-06 02:05:09Z bkarwin $
 21:  */
 22: 
 23: 
 24: /**
 25:  * @see Zend_Db_Statement
 26:  */
 27: require_once 'Zend/Db/Statement.php';
 28: 
 29: 
 30: /**
 31:  * Extends for Mysqli
 32:  *
 33:  * @category   Zend
 34:  * @package    Zend_Db
 35:  * @subpackage Statement
 36:  * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
 37:  * @license    http://framework.zend.com/license/new-bsd     New BSD License
 38:  */
 39: class Zend_Db_Statement_Mysqli extends Zend_Db_Statement
 40: {
 41: 
 42:     /**
 43:      * Column names.
 44:      *
 45:      * @var array
 46:      */
 47:     protected $_keys;
 48: 
 49:     /**
 50:      * Fetched result values.
 51:      *
 52:      * @var array
 53:      */
 54:     protected $_values;
 55: 
 56:     /**
 57:      * @var array
 58:      */
 59:     protected $_meta = null;
 60: 
 61:     /**
 62:      * @param  string $sql
 63:      * @return void
 64:      * @throws Zend_Db_Statement_Mysqli_Exception
 65:      */
 66:     public function _prepare($sql)
 67:     {
 68:         $mysqli = $this->_adapter->getConnection();
 69: 
 70:         $this->_stmt = $mysqli->prepare($sql);
 71: 
 72:         if ($this->_stmt === false || $mysqli->errno) {
 73:             /**
 74:              * @see Zend_Db_Statement_Mysqli_Exception
 75:              */
 76:             require_once 'Zend/Db/Statement/Mysqli/Exception.php';
 77:             throw new Zend_Db_Statement_Mysqli_Exception("Mysqli prepare error: " . $mysqli->error, $mysqli->errno);
 78:         }
 79:     }
 80: 
 81:     /**
 82:      * Binds a parameter to the specified variable name.
 83:      *
 84:      * @param mixed $parameter Name the parameter, either integer or string.
 85:      * @param mixed $variable  Reference to PHP variable containing the value.
 86:      * @param mixed $type      OPTIONAL Datatype of SQL parameter.
 87:      * @param mixed $length    OPTIONAL Length of SQL parameter.
 88:      * @param mixed $options   OPTIONAL Other options.
 89:      * @return bool
 90:      * @throws Zend_Db_Statement_Mysqli_Exception
 91:      */
 92:     protected function _bindParam($parameter, &$variable, $type = null, $length = null, $options = null)
 93:     {
 94:         return true;
 95:     }
 96: 
 97:     /**
 98:      * Closes the cursor and the statement.
 99:      *
100:      * @return bool
101:      */
102:     public function close()
103:     {
104:         if ($this->_stmt) {
105:             $r = $this->_stmt->close();
106:             $this->_stmt = null;
107:             return $r;
108:         }
109:         return false;
110:     }
111: 
112:     /**
113:      * Closes the cursor, allowing the statement to be executed again.
114:      *
115:      * @return bool
116:      */
117:     public function closeCursor()
118:     {
119:         if ($stmt = $this->_stmt) {
120:             $mysqli = $this->_adapter->getConnection();
121:             while ($mysqli->more_results()) {
122:                 $mysqli->next_result();
123:             }
124:             $this->_stmt->free_result();
125:             return $this->_stmt->reset();
126:         }
127:         return false;
128:     }
129: 
130:     /**
131:      * Returns the number of columns in the result set.
132:      * Returns null if the statement has no result set metadata.
133:      *
134:      * @return int The number of columns.
135:      */
136:     public function columnCount()
137:     {
138:         if (isset($this->_meta) && $this->_meta) {
139:             return $this->_meta->field_count;
140:         }
141:         return 0;
142:     }
143: 
144:     /**
145:      * Retrieves the error code, if any, associated with the last operation on
146:      * the statement handle.
147:      *
148:      * @return string error code.
149:      */
150:     public function errorCode()
151:     {
152:         if (!$this->_stmt) {
153:             return false;
154:         }
155:         return substr($this->_stmt->sqlstate, 0, 5);
156:     }
157: 
158:     /**
159:      * Retrieves an array of error information, if any, associated with the
160:      * last operation on the statement handle.
161:      *
162:      * @return array
163:      */
164:     public function errorInfo()
165:     {
166:         if (!$this->_stmt) {
167:             return false;
168:         }
169:         return array(
170:             substr($this->_stmt->sqlstate, 0, 5),
171:             $this->_stmt->errno,
172:             $this->_stmt->error,
173:         );
174:     }
175: 
176:     /**
177:      * Executes a prepared statement.
178:      *
179:      * @param array $params OPTIONAL Values to bind to parameter placeholders.
180:      * @return bool
181:      * @throws Zend_Db_Statement_Mysqli_Exception
182:      */
183:     public function _execute(array $params = null)
184:     {
185:         if (!$this->_stmt) {
186:             return false;
187:         }
188: 
189:         // if no params were given as an argument to execute(),
190:         // then default to the _bindParam array
191:         if ($params === null) {
192:             $params = $this->_bindParam;
193:         }
194:         // send $params as input parameters to the statement
195:         if ($params) {
196:             array_unshift($params, str_repeat('s', count($params)));
197:             $stmtParams = array();
198:             foreach ($params as $k => &$value) {
199:                 $stmtParams[$k] = &$value;
200:             }
201:             call_user_func_array(
202:                 array($this->_stmt, 'bind_param'),
203:                 $stmtParams
204:                 );
205:         }
206: 
207:         // execute the statement
208:         $retval = $this->_stmt->execute();
209:         if ($retval === false) {
210:             /**
211:              * @see Zend_Db_Statement_Mysqli_Exception
212:              */
213:             require_once 'Zend/Db/Statement/Mysqli/Exception.php';
214:             throw new Zend_Db_Statement_Mysqli_Exception("Mysqli statement execute error : " . $this->_stmt->error, $this->_stmt->errno);
215:         }
216: 
217: 
218:         // retain metadata
219:         if ($this->_meta === null) {
220:             $this->_meta = $this->_stmt->result_metadata();
221:             if ($this->_stmt->errno) {
222:                 /**
223:                  * @see Zend_Db_Statement_Mysqli_Exception
224:                  */
225:                 require_once 'Zend/Db/Statement/Mysqli/Exception.php';
226:                 throw new Zend_Db_Statement_Mysqli_Exception("Mysqli statement metadata error: " . $this->_stmt->error, $this->_stmt->errno);
227:             }
228:         }
229: 
230:         // statements that have no result set do not return metadata
231:         if ($this->_meta !== false) {
232: 
233:             // get the column names that will result
234:             $this->_keys = array();
235:             foreach ($this->_meta->fetch_fields() as $col) {
236:                 $this->_keys[] = $this->_adapter->foldCase($col->name);
237:             }
238: 
239:             // set up a binding space for result variables
240:             $this->_values = array_fill(0, count($this->_keys), null);
241: 
242:             // set up references to the result binding space.
243:             // just passing $this->_values in the call_user_func_array()
244:             // below won't work, you need references.
245:             $refs = array();
246:             foreach ($this->_values as $i => &$f) {
247:                 $refs[$i] = &$f;
248:             }
249: 
250:             $this->_stmt->store_result();
251:             // bind to the result variables
252:             call_user_func_array(
253:                 array($this->_stmt, 'bind_result'),
254:                 $this->_values
255:             );
256:         }
257:         return $retval;
258:     }
259: 
260: 
261:     /**
262:      * Fetches a row from the result set.
263:      *
264:      * @param int $style  OPTIONAL Fetch mode for this fetch operation.
265:      * @param int $cursor OPTIONAL Absolute, relative, or other.
266:      * @param int $offset OPTIONAL Number for absolute or relative cursors.
267:      * @return mixed Array, object, or scalar depending on fetch mode.
268:      * @throws Zend_Db_Statement_Mysqli_Exception
269:      */
270:     public function fetch($style = null, $cursor = null, $offset = null)
271:     {
272:         if (!$this->_stmt) {
273:             return false;
274:         }
275:         // fetch the next result
276:         $retval = $this->_stmt->fetch();
277:         switch ($retval) {
278:             case null: // end of data
279:             case false: // error occurred
280:                 $this->_stmt->reset();
281:                 return false;
282:             default:
283:                 // fallthrough
284:         }
285: 
286:         // make sure we have a fetch mode
287:         if ($style === null) {
288:             $style = $this->_fetchMode;
289:         }
290: 
291:         // dereference the result values, otherwise things like fetchAll()
292:         // return the same values for every entry (because of the reference).
293:         $values = array();
294:         foreach ($this->_values as $key => $val) {
295:             $values[] = $val;
296:         }
297: 
298:         $row = false;
299:         switch ($style) {
300:             case Zend_Db::FETCH_NUM:
301:                 $row = $values;
302:                 break;
303:             case Zend_Db::FETCH_ASSOC:
304:                 $row = array_combine($this->_keys, $values);
305:                 break;
306:             case Zend_Db::FETCH_BOTH:
307:                 $assoc = array_combine($this->_keys, $values);
308:                 $row = array_merge($values, $assoc);
309:                 break;
310:             case Zend_Db::FETCH_OBJ:
311:                 $row = (object) array_combine($this->_keys, $values);
312:                 break;
313:             case Zend_Db::FETCH_BOUND:
314:                 $assoc = array_combine($this->_keys, $values);
315:                 $row = array_merge($values, $assoc);
316:                 return $this->_fetchBound($row);
317:                 break;
318:             default:
319:                 /**
320:                  * @see Zend_Db_Statement_Mysqli_Exception
321:                  */
322:                 require_once 'Zend/Db/Statement/Mysqli/Exception.php';
323:                 throw new Zend_Db_Statement_Mysqli_Exception("Invalid fetch mode '$style' specified");
324:                 break;
325:         }
326:         return $row;
327:     }
328: 
329:     /**
330:      * Retrieves the next rowset (result set) for a SQL statement that has
331:      * multiple result sets.  An example is a stored procedure that returns
332:      * the results of multiple queries.
333:      *
334:      * @return bool
335:      * @throws Zend_Db_Statement_Mysqli_Exception
336:      */
337:     public function nextRowset()
338:     {
339:         /**
340:          * @see Zend_Db_Statement_Mysqli_Exception
341:          */
342:         require_once 'Zend/Db/Statement/Mysqli/Exception.php';
343:         throw new Zend_Db_Statement_Mysqli_Exception(__FUNCTION__.'() is not implemented');
344:     }
345: 
346:     /**
347:      * Returns the number of rows affected by the execution of the
348:      * last INSERT, DELETE, or UPDATE statement executed by this
349:      * statement object.
350:      *
351:      * @return int     The number of rows affected.
352:      */
353:     public function rowCount()
354:     {
355:         if (!$this->_adapter) {
356:             return false;
357:         }
358:         $mysqli = $this->_adapter->getConnection();
359:         return $mysqli->affected_rows;
360:     }
361: 
362: }
Pry Framework API documentation generated by ApiGen 2.6.1