Source for file mysqli.php
Documentation is available at mysqli.php
* @package Joomla.Platform
* @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE
* @package Joomla.Platform
* @see http://php.net/manual/en/book.mysqli.php
* The name of the database driver.
* The character(s) used to quote SQL statement names such as table names or field names,
* etc. The child classes should define this as necessary. If a single character string the
* same character is used for both sides of the quoted name, else the first character will be
* used for the opening quote and the second for the closing quote.
* The null or zero representation of a timestamp for the database driver. This should be
* defined in child classes to hold the appropriate value for the engine.
* @var string The minimum supported database version.
protected static $dbMinimum =
'5.0.4';
* @param array $options List of options used to configure the connection
// Get some basic values from the options.
$options['host'] =
(isset
($options['host'])) ?
$options['host'] :
'localhost';
$options['user'] =
(isset
($options['user'])) ?
$options['user'] :
'root';
$options['password'] =
(isset
($options['password'])) ?
$options['password'] :
'';
$options['database'] =
(isset
($options['database'])) ?
$options['database'] :
'';
$options['select'] =
(isset
($options['select'])) ? (bool)
$options['select'] :
true;
$options['socket'] =
null;
// Finalize initialisation.
* Connects to the database if needed.
* @return void Returns void if the database connected successfully.
* @throws RuntimeException
* Unlike mysql_connect(), mysqli_connect() takes the port and socket as separate arguments. Therefore, we
* have to extract them from the host string.
$port = isset
($this->options['port']) ?
$this->options['port'] :
3306;
if (preg_match('/^(?P<host>((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))(:(?P<port>.+))?$/', $this->options['host'], $matches))
// It's an IPv4 address with ot without port
$this->options['host'] =
$matches['host'];
if (!empty($matches['port']))
$port =
$matches['port'];
elseif (preg_match('/^(?P<host>\[.*\])(:(?P<port>.+))?$/', $this->options['host'], $matches))
// We assume square-bracketed IPv6 address with or without port, e.g. [fe80:102::2%eth1]:3306
$this->options['host'] =
$matches['host'];
if (!empty($matches['port']))
$port =
$matches['port'];
elseif (preg_match('/^(?P<host>(\w+:\/{2,3})?[a-z0-9\.\-]+)(:(?P<port>[^:]+))?$/i', $this->options['host'], $matches))
// Named host (e.g domain.com or localhost) with ot without port
$this->options['host'] =
$matches['host'];
if (!empty($matches['port']))
$port =
$matches['port'];
// Empty host, just port, e.g. ':3306'
$this->options['host'] =
'localhost';
$port =
$matches['port'];
// ... else we assume normal (naked) IPv6 address, so host and port stay as they are or default
// Get the port number or socket name
$this->options['port'] = (int)
$port;
// Make sure the MySQLi extension for PHP is installed and enabled.
throw
new RuntimeException('The MySQL adapter mysqli is not available');
// Attempt to connect to the server.
throw
new RuntimeException('Could not connect to MySQL.');
// Set sql_mode to non_strict mode
// If auto-select is enabled select the given database.
// Set charactersets (needed for MySQL 4.1.2+).
// Turn MySQL profiling ON in debug mode:
if ($this->debug &&
$this->hasProfiling())
* Disconnects the database.
* Method to escape a string for usage in an SQL statement.
* @param string $text The string to be escaped.
* @param boolean $extra Optional parameter to provide extra escaping.
* @return string The escaped string.
public function escape($text, $extra =
false)
* Test to see if the MySQL connector is available.
* @return boolean True on success, false otherwise.
* Determines if the connection to the server is active.
* @return boolean True if connected to the database engine.
* Drops a table from the database.
* @param string $tableName The name of the database table to drop.
* @param boolean $ifExists Optionally specify that the table must exist before it is dropped.
* @return JDatabaseDriverMysqli Returns this object to support chaining.
* @throws RuntimeException
public function dropTable($tableName, $ifExists =
true)
$this->setQuery('DROP TABLE ' .
($ifExists ?
'IF EXISTS ' :
'') .
$query->quoteName($tableName));
* Get the number of affected rows for the previous executed SQL statement.
* @return integer The number of affected rows.
* Method to get the database collation in use by sampling a text field of a table in the database.
* @return mixed The collation in use by the database (string) or boolean false if not supported.
* @throws RuntimeException
$this->setQuery('SHOW FULL COLUMNS FROM ' .
$tables[0]);
foreach ($array as $field)
return $field['Collation'];
* Get the number of returned rows for the previous executed SQL statement.
* @param resource $cursor An optional database cursor resource to extract the row count from.
* @return integer The number of returned rows.
* Shows the table CREATE statement that creates the given tables.
* @param mixed $tables A table name or a list of table names.
* @return array A list of the create SQL for the tables.
* @throws RuntimeException
// Sanitize input to an array and iterate over the list.
foreach ($tables as $table)
// Set the query to get the table CREATE statement.
// Populate the result array based on the create statements.
$result[$table] =
$row[1];
* Retrieves field information about a given table.
* @param string $table The name of the database table.
* @param boolean $typeOnly True to only return field types.
* @return array An array of fields for the database table.
* @throws RuntimeException
// Set the query to get the table fields statement.
// If we only want the type as the value add just that to the list.
foreach ($fields as $field)
$result[$field->Field] =
preg_replace("/[(0-9)]/", '', $field->Type);
// If we want the whole field data object add that to the list.
foreach ($fields as $field)
$result[$field->Field] =
$field;
* Get the details list of keys for a table.
* @param string $table The name of the table.
* @return array An array of the column specification for the table.
* @throws RuntimeException
// Get the details columns information.
* Method to get an array of all tables in the database.
* @return array An array of all the tables in the database.
* @throws RuntimeException
// Set the query to get the tables statement.
* Get the version of the database connector.
* @return string The database connector version.
* Method to get the auto-incremented value from the last INSERT statement.
* @return mixed The value of the auto-increment field from the last inserted row.
* If the value is greater than maximal int value, it will return a string.
* Locks a table in the database.
* @param string $table The name of the table to unlock.
* @return JDatabaseDriverMysqli Returns this object to support chaining.
* @throws RuntimeException
* Execute the SQL statement.
* @return mixed A database cursor resource on success, boolean false on failure.
* @throws RuntimeException
// Take a local copy so that we don't modify the original query and cause issues later
$query .=
' LIMIT ' .
$this->offset .
', ' .
$this->limit;
// Increment the query counter.
// Reset the error values.
// If debugging is enabled then let's log the query.
// Add the query to the object queue.
// Avoid warning if result already freed by third-party library
// Execute the query. Error suppression is used here to prevent warnings/notices that the connection has been lost.
if (defined('DEBUG_BACKTRACE_IGNORE_ARGS'))
// If an error occurred handle it.
// Check if the server was disconnected.
// If connect fails, ignore that exception and throw the normal exception.
catch
(RuntimeException $e)
// Since we were able to reconnect, run the query again.
// The server was not disconnected.
* Renames a table in the database.
* @param string $oldTable The name of the table to be renamed
* @param string $newTable The new name for the table.
* @param string $backup Not used by MySQL.
* @param string $prefix Not used by MySQL.
* @return JDatabaseDriverMysqli Returns this object to support chaining.
* @throws RuntimeException
public function renameTable($oldTable, $newTable, $backup =
null, $prefix =
null)
$this->setQuery('RENAME TABLE ' .
$oldTable .
' TO ' .
$newTable)->execute();
* Select a database for use.
* @param string $database The name of the database to select for use.
* @return boolean True if the database was successfully selected.
* @throws RuntimeException
public function select($database)
throw
new RuntimeException('Could not connect to database.');
* Set the connection to use UTF-8 character encoding.
* @return boolean True on success.
* Method to commit a transaction.
* @param boolean $toSavepoint If true, commit to the last savepoint.
* @throws RuntimeException
if ($this->setQuery('COMMIT')->execute())
* Method to roll back a transaction.
* @param boolean $toSavepoint If true, rollback to the last savepoint.
* @throws RuntimeException
if ($this->setQuery('ROLLBACK')->execute())
* Method to initialize a transaction.
* @param boolean $asSavepoint If true and a transaction is already active, a savepoint will be created.
* @throws RuntimeException
if ($this->setQuery('START TRANSACTION')->execute())
* Method to fetch a row from the result set cursor as an array.
* @param mixed $cursor The optional result set cursor from which to fetch the row.
* @return mixed Either the next row from the result set or false if there are no more rows.
* Method to fetch a row from the result set cursor as an associative array.
* @param mixed $cursor The optional result set cursor from which to fetch the row.
* @return mixed Either the next row from the result set or false if there are no more rows.
* Method to fetch a row from the result set cursor as an object.
* @param mixed $cursor The optional result set cursor from which to fetch the row.
* @param string $class The class name to use for the returned row object.
* @return mixed Either the next row from the result set or false if there are no more rows.
protected function fetchObject($cursor =
null, $class =
'stdClass')
* Method to free up the memory used for the result set.
* @param mixed $cursor The optional result set cursor from which to fetch the row.
if ((! $cursor) ||
($cursor ===
$this->cursor))
* Unlocks tables in the database.
* @return JDatabaseDriverMysqli Returns this object to support chaining.
* @throws RuntimeException
$this->setQuery('UNLOCK TABLES')->execute();
* Internal function to check if profiling is available
private function hasProfiling()
Documentation generated on Tue, 19 Nov 2013 15:09:16 +0100 by phpDocumentor 1.4.3