Source for file MssqlConnector.php
Documentation is available at MssqlConnector.php
///////////////////////////////////////////////////////////////////////////////
* IConnector implementation for the PHP MSSQL database extension.
* <li>The {@link PHP_MANUAL#book.mssql Microsoft SQL Server database extension}</li>
* This library is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* The Connector library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* {@link http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License}
* @author Per Egil Roksvaag
* @copyright 2009 Per Egil Roksvaag
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
///////////////////////////////////////////////////////////////////////////////
* Includes the parent class.
require_once("BaseConnector.php");
///////////////////////////////////////////////////////////////////////////////
* IConnector implementation for the PHP MSSQL database extension.
///////////////////////////////////////////////////////////////////////////
* Open a connection to a MSSQL Server 2000 or higher and set global options.
* @param array $connection An associated array of connection settings, like host and user name.
* @param array $options An associated array of global options for the resulting instance.
if($this->open($connection))
unset
($this->options[self::PARAM_PREFIX]);
unset
($this->options[self::PARAM_QUERIES]);
else if($this->lookup("throwException", $options))
throw
new Exception("MssqlConnector error: Connection failed.");
else if($this->lookup(self::LOG_ERROR, $options))
$log =
"MssqlConnector error: Connection failed in ";
///////////////////////////////////////////////////////////////////////////
* Open a database connection.
* @param array $connection An associated array of connection settings, like host and user name.
* @return bool <var>true</var>, if a database connection was successfully opened, <var>false</var> otherwise.
protected function open($connection)
$hostname =
$this->lookup(self::CONN_HOSTNAME, $connection);
$database =
$this->lookup(self::CONN_DATABASE, $connection);
$username =
$this->lookup(self::CONN_USERNAME, $connection);
$password =
$this->lookup(self::CONN_PASSWORD, $connection);
$link =
$this->lookup(self::CONN_POOL, $connection) ===
false;
$port =
$this->lookup(self::CONN_PORT, $connection);
$port &&
$hostname.=
",".
$port;
$this->conn =
$this->lookup(self::CONN_PERSISTENT, $connection)
///////////////////////////////////////////////////////////////////////////
* Send a SQL SELECT query to the database and get the query result.
* @see IConnector::select().
* @param string $query A SQL query to execute on a database.
* @param array $param An associated array of values to be used in the $query.
* @param array $map An array of type definitions for the <var>$param</var> values.
* @param array $options An associated array of options, see the {@tutorial connector.pkg#options.element}.
* @throws Exception when $param doesn't match the type definition $map.
* @return array The query result as a table (array of associated arrays).
public function select($query, $param =
array(), $map =
array(), $options =
array())
$query =
$this->bind($query, $param, $stack, $options);
$query =
$this->build($query, $options);
$hash =
$this->getHash($query, $stack, $options);
if($this->lookup(self::LOG_DEBUG, $options))
$log =
"MssqlConnector debug: Select query in ";
if($this->getCache($hash, $table, $options))
do
$table[] =
$this->fetch($stmt, $options);
$this->setCache($hash, $table, $options);
if($this->lookup(self::LOG_ERROR, $options))
$log =
"MssqlConnector error: Select query in ";
///////////////////////////////////////////////////////////////////////////
* Send a SQL INSERT query to the database and get the IDENTITY ID
* generated from the last INSERT operation (if any).
* @see IConnector::insert().
* @param string $query A SQL query to execute on a database.
* @param array $param An associated array of values to be used in the $query.
* @param array $map An array of type definitions for the <var>$param</var> values.
* @param array $options An associated array of options, see the {@tutorial connector.pkg#options.element}.
* @throws Exception when $param doesn't match the type definition $map.
* @return int The IDENTITY ID of the last inserted row.
public function insert($query, $param =
array(), $map =
array(), $options =
array())
$query =
$this->bind($query, $param, $stack, $options);
$query =
rtrim($query, ";").
";".
LB.
"SELECT SCOPE_IDENTITY();";
if($this->lookup(self::LOG_DEBUG, $options))
$log =
"MssqlConnector debug: Insert query in ";
else if($this->lookup(self::LOG_ERROR, $options))
$log =
"MssqlConnector error: Insert query in ";
///////////////////////////////////////////////////////////////////////////
* Send a SQL UPDATE query to the database and get the number of rows
* @see IConnector::update().
* @param string $query A SQL query to execute on a database.
* @param array $param An associated array of values to be used in the $query.
* @param array $map An array of type definitions for the <var>$param</var> values.
* @param array $options An associated array of options, see the {@tutorial connector.pkg#options.element}.
* @throws Exception when $param doesn't match the type definition $map.
* @return int The number of rows updates by the query.
public function update($query, $param =
array(), $map =
array(), $options =
array())
$query =
$this->bind($query, $param, $stack, $options);
if($this->lookup(self::LOG_DEBUG, $options))
$log =
"MssqlConnector debug: Update query in ";
else if($this->lookup(self::LOG_ERROR, $options))
$log =
"MssqlConnector error: Update query in ";
///////////////////////////////////////////////////////////////////////////
* Send a SQL DELETE query to the database and get the number of rows
* @see IConnector::delete().
* @param string $query A SQL query to execute on a database.
* @param array $param An associated array of values to be used in the $query.
* @param array $map An array of type definitions for the <var>$param</var> values.
* @param array $options An associated array of options, see the {@tutorial connector.pkg#options.element}.
* @throws Exception when $param doesn't match the type definition $map.
* @return int The number of rows deleted by the query.
public function delete($query, $param =
array(), $map =
array(), $options =
array())
$query =
$this->bind($query, $param, $stack, $options);
if($this->lookup(self::LOG_DEBUG, $options))
$log =
"MssqlConnector debug: Delete query in ";
else if($this->lookup(self::LOG_ERROR, $options))
$log =
"MssqlConnector error: Delete query in ";
///////////////////////////////////////////////////////////////////////////
* Add a TOP x statement to a SQL SELECT query when the
* {@link IConnector::RESULT_LENGTH} is set.
* @param string $query A SQL query to execute on a database.
* @param array $options An associated array of options.
* @return string A modified SQL query.
protected function build($query, $options =
array())
$offset =
$this->lookup(self::RESULT_OFFSET, $options, 0);
$length =
$this->lookup(self::RESULT_LENGTH, $options);
$number =
$offset +
$length;
$pattern =
"/\A(SELECT)([\s]+(ALL|DISTINCT))?\b/i";
$query =
preg_replace($pattern, "$0 TOP {$number}", $query);
///////////////////////////////////////////////////////////////////////////
* Fetch multiple rows of a query result.
* If the {@link IConnector::RESULT_LENGTH} or {@link IConnector::RESULT_OFFSET}
* options are set, some rows are omitted from the beginning and/or the end
* If the {@link IConnector::RESULT_KEY_FIELD} option is set, the
* resulting table is an <b>associated</b> array of rows.
* @param resource $stmt A statement resource corresponding to an executed statement.
* @param array $options An associated array of options.
* @return array The query result as a table (array of associated arrays).
protected function fetch($stmt, $options =
array())
$key =
$this->lookup(self::RESULT_KEY_FIELD, $options);
$offset =
$this->lookup(self::RESULT_OFFSET, $options, 0);
$length =
$this->lookup(self::RESULT_LENGTH, $options);
$number =
is_null($length) ?
PHP_INT_MAX :
$length +
$offset;
if($number <=
$index) break;
if($offset >
$index++
) continue;
$key ?
$table[$row[$key]] =
$row :
$table[] =
$row;
///////////////////////////////////////////////////////////////////////////
Documentation generated on Wed, 03 Jun 2009 12:41:52 +0200 by phpDocumentor 1.4.1