ibase.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 1,072 行 · 第 1/3 页

PHP
1,072
字号
<?php/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: *//** * The PEAR DB driver for PHP's interbase extension * for interacting with Interbase and Firebird databases * * While this class works with PHP 4, PHP's InterBase extension is * unstable in PHP 4.  Use PHP 5. * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt.  If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to license@php.net so we can mail you a copy immediately. * * @category   Database * @package    DB * @author     Sterling Hughes <sterling@php.net> * @author     Daniel Convissor <danielc@php.net> * @copyright  1997-2005 The PHP Group * @license    http://www.php.net/license/3_0.txt  PHP License 3.0 * @version    CVS: $Id: ibase.php,v 1.109 2005/03/04 23:12:36 danielc Exp $ * @link       http://pear.php.net/package/DB *//** * Obtain the DB_common class so it can be extended from */require_once 'DB/common.php';/** * The methods PEAR DB uses to interact with PHP's interbase extension * for interacting with Interbase and Firebird databases * * These methods overload the ones declared in DB_common. * * While this class works with PHP 4, PHP's InterBase extension is * unstable in PHP 4.  Use PHP 5. * * NOTICE:  limitQuery() only works for Firebird. * * @category   Database * @package    DB * @author     Sterling Hughes <sterling@php.net> * @author     Daniel Convissor <danielc@php.net> * @copyright  1997-2005 The PHP Group * @license    http://www.php.net/license/3_0.txt  PHP License 3.0 * @version    Release: 1.7.6 * @link       http://pear.php.net/package/DB * @since      Class became stable in Release 1.7.0 */class DB_ibase extends DB_common{    // {{{ properties    /**     * The DB driver type (mysql, oci8, odbc, etc.)     * @var string     */    var $phptype = 'ibase';    /**     * The database syntax variant to be used (db2, access, etc.), if any     * @var string     */    var $dbsyntax = 'ibase';    /**     * The capabilities of this DB implementation     *     * The 'new_link' element contains the PHP version that first provided     * new_link support for this DBMS.  Contains false if it's unsupported.     *     * Meaning of the 'limit' element:     *   + 'emulate' = emulate with fetch row by number     *   + 'alter'   = alter the query     *   + false     = skip rows     *     * NOTE: only firebird supports limit.     *     * @var array     */    var $features = array(        'limit'         => false,        'new_link'      => false,        'numrows'       => 'emulate',        'pconnect'      => true,        'prepare'       => true,        'ssl'           => false,        'transactions'  => true,    );    /**     * A mapping of native error codes to DB error codes     * @var array     */    var $errorcode_map = array(        -104 => DB_ERROR_SYNTAX,        -150 => DB_ERROR_ACCESS_VIOLATION,        -151 => DB_ERROR_ACCESS_VIOLATION,        -155 => DB_ERROR_NOSUCHTABLE,        -157 => DB_ERROR_NOSUCHFIELD,        -158 => DB_ERROR_VALUE_COUNT_ON_ROW,        -170 => DB_ERROR_MISMATCH,        -171 => DB_ERROR_MISMATCH,        -172 => DB_ERROR_INVALID,        // -204 =>  // Covers too many errors, need to use regex on msg        -205 => DB_ERROR_NOSUCHFIELD,        -206 => DB_ERROR_NOSUCHFIELD,        -208 => DB_ERROR_INVALID,        -219 => DB_ERROR_NOSUCHTABLE,        -297 => DB_ERROR_CONSTRAINT,        -303 => DB_ERROR_INVALID,        -413 => DB_ERROR_INVALID_NUMBER,        -530 => DB_ERROR_CONSTRAINT,        -551 => DB_ERROR_ACCESS_VIOLATION,        -552 => DB_ERROR_ACCESS_VIOLATION,        // -607 =>  // Covers too many errors, need to use regex on msg        -625 => DB_ERROR_CONSTRAINT_NOT_NULL,        -803 => DB_ERROR_CONSTRAINT,        -804 => DB_ERROR_VALUE_COUNT_ON_ROW,        -904 => DB_ERROR_CONNECT_FAILED,        -922 => DB_ERROR_NOSUCHDB,        -923 => DB_ERROR_CONNECT_FAILED,        -924 => DB_ERROR_CONNECT_FAILED    );    /**     * The raw database connection created by PHP     * @var resource     */    var $connection;    /**     * The DSN information for connecting to a database     * @var array     */    var $dsn = array();    /**     * The number of rows affected by a data manipulation query     * @var integer     * @access private     */    var $affected = 0;    /**     * Should data manipulation queries be committed automatically?     * @var bool     * @access private     */    var $autocommit = true;    /**     * The prepared statement handle from the most recently executed statement     *     * {@internal  Mainly here because the InterBase/Firebird API is only     * able to retrieve data from result sets if the statemnt handle is     * still in scope.}}     *     * @var resource     */    var $last_stmt;    /**     * Is the given prepared statement a data manipulation query?     * @var array     * @access private     */    var $manip_query = array();    // }}}    // {{{ constructor    /**     * This constructor calls <kbd>$this->DB_common()</kbd>     *     * @return void     */    function DB_ibase()    {        $this->DB_common();    }    // }}}    // {{{ connect()    /**     * Connect to the database server, log in and open the database     *     * Don't call this method directly.  Use DB::connect() instead.     *     * PEAR DB's ibase driver supports the following extra DSN options:     *   + buffers    The number of database buffers to allocate for the     *                 server-side cache.     *   + charset    The default character set for a database.     *   + dialect    The default SQL dialect for any statement     *                 executed within a connection.  Defaults to the     *                 highest one supported by client libraries.     *                 Functional only with InterBase 6 and up.     *   + role       Functional only with InterBase 5 and up.     *     * @param array $dsn         the data source name     * @param bool  $persistent  should the connection be persistent?     *     * @return int  DB_OK on success. A DB_Error object on failure.     */    function connect($dsn, $persistent = false)    {        if (!PEAR::loadExtension('interbase')) {            return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND);        }        $this->dsn = $dsn;        if ($dsn['dbsyntax']) {            $this->dbsyntax = $dsn['dbsyntax'];        }        if ($this->dbsyntax == 'firebird') {            $this->features['limit'] = 'alter';        }        $params = array(            $dsn['hostspec']                    ? ($dsn['hostspec'] . ':' . $dsn['database'])                    : $dsn['database'],            $dsn['username'] ? $dsn['username'] : null,            $dsn['password'] ? $dsn['password'] : null,            isset($dsn['charset']) ? $dsn['charset'] : null,            isset($dsn['buffers']) ? $dsn['buffers'] : null,            isset($dsn['dialect']) ? $dsn['dialect'] : null,            isset($dsn['role'])    ? $dsn['role'] : null,        );        $connect_function = $persistent ? 'ibase_pconnect' : 'ibase_connect';        $this->connection = @call_user_func_array($connect_function, $params);        if (!$this->connection) {            return $this->ibaseRaiseError(DB_ERROR_CONNECT_FAILED);        }        return DB_OK;    }    // }}}    // {{{ disconnect()    /**     * Disconnects from the database server     *     * @return bool  TRUE on success, FALSE on failure     */    function disconnect()    {        $ret = @ibase_close($this->connection);        $this->connection = null;        return $ret;    }    // }}}    // {{{ simpleQuery()    /**     * Sends a query to the database server     *     * @param string  the SQL query string     *     * @return mixed  + a PHP result resrouce for successful SELECT queries     *                + the DB_OK constant for other successful queries     *                + a DB_Error object on failure     */    function simpleQuery($query)    {        $ismanip = DB::isManip($query);        $this->last_query = $query;        $query = $this->modifyQuery($query);        $result = @ibase_query($this->connection, $query);        if (!$result) {            return $this->ibaseRaiseError();        }        if ($this->autocommit && $ismanip) {            @ibase_commit($this->connection);        }        if ($ismanip) {            $this->affected = $result;            return DB_OK;        } else {            $this->affected = 0;            return $result;        }    }    // }}}    // {{{ modifyLimitQuery()    /**     * Adds LIMIT clauses to a query string according to current DBMS standards     *     * Only works with Firebird.     *     * @param string $query   the query to modify     * @param int    $from    the row to start to fetching (0 = the first row)     * @param int    $count   the numbers of rows to fetch     * @param mixed  $params  array, string or numeric data to be used in     *                         execution of the statement.  Quantity of items     *                         passed must match quantity of placeholders in     *                         query:  meaning 1 placeholder for non-array     *                         parameters or 1 placeholder per array element.     *     * @return string  the query string with LIMIT clauses added     *     * @access protected     */    function modifyLimitQuery($query, $from, $count, $params = array())    {        if ($this->dsn['dbsyntax'] == 'firebird') {            $query = preg_replace('/^([\s(])*SELECT/i',                                  "SELECT FIRST $count SKIP $from", $query);        }        return $query;    }    // }}}    // {{{ nextResult()    /**     * Move the internal ibase result pointer to the next available result     *     * @param a valid fbsql result resource     *     * @access public     *     * @return true if a result is available otherwise return false     */    function nextResult($result)    {        return false;    }    // }}}    // {{{ fetchInto()    /**     * Places a row from the result set into the given array     *     * Formating of the array and the data therein are configurable.     * See DB_result::fetchInto() for more information.     *     * This method is not meant to be called directly.  Use     * DB_result::fetchInto() instead.  It can't be declared "protected"     * because DB_result is a separate object.     *     * @param resource $result    the query result resource

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?