⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sybase.php

📁 太烦了
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */// +----------------------------------------------------------------------+// | PHP Version 4                                                        |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2004 The PHP Group                                |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license,      |// | that is bundled with this package in the file LICENSE, and is        |// | available at through the world-wide-web at                           |// | http://www.php.net/license/2_02.txt.                                 |// | If you did not receive a copy of the PHP license and are unable to   |// | obtain it through the world-wide-web, please send a note to          |// | license@php.net so we can mail you a copy immediately.               |// +----------------------------------------------------------------------+// | Authors: Sterling Hughes <sterling@php.net>                          |// |          Ant鬾io Carlos Ven鈔cio J鷑ior <floripa@php.net>            |// | Maintainer: Daniel Convissor <danielc@php.net>                       |// +----------------------------------------------------------------------+//// $Id: sybase.php,v 1.2 2005/07/22 05:10:14 max Exp $// TODO//    - This driver may fail with multiple connections under the same//      user/pass/host and different databasesrequire_once PEAR_DIR . 'DB/common.php';/** * Database independent query interface definition for PHP's Sybase * extension. * * @package  DB * @version  $Id: sybase.php,v 1.2 2005/07/22 05:10:14 max Exp $ * @category Database * @author   Sterling Hughes <sterling@php.net> * @author   Ant鬾io Carlos Ven鈔cio J鷑ior <floripa@php.net> */class DB_sybase extends DB_common{    // {{{ properties    var $connection;    var $phptype, $dbsyntax;    var $prepare_tokens = array();    var $prepare_types = array();    var $transaction_opcount = 0;    var $autocommit = true;    // }}}    // {{{ constructor    /**     * DB_sybase constructor.     *     * @access public     */    function DB_sybase()    {        $this->DB_common();        $this->phptype = 'sybase';        $this->dbsyntax = 'sybase';        $this->features = array(            'prepare' => false,            'pconnect' => true,            'transactions' => false,            'limit' => 'emulate'        );        $this->errorcode_map = array(        );    }    // }}}    // {{{ connect()    /**     * Connect to a database and log in as the specified user.     *     * @param $dsn the data source name (see DB::parseDSN for syntax)     * @param $persistent (optional) whether the connection should     *        be persistent     * @access public     * @return int DB_OK on success, a DB error on failure     */    function connect($dsninfo, $persistent = false)    {        if (!DB::assertExtension('sybase') &&            !DB::assertExtension('sybase_ct'))        {            return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND);        }        $this->dsn = $dsninfo;        $interface = $dsninfo['hostspec'] ? $dsninfo['hostspec'] : 'localhost';        $connect_function = $persistent ? 'sybase_pconnect' : 'sybase_connect';        if ($interface && $dsninfo['username'] && $dsninfo['password']) {            $conn = @$connect_function($interface, $dsninfo['username'],                                       $dsninfo['password']);        } elseif ($interface && $dsninfo['username']) {            /*             * Using false for pw as a workaround to avoid segfault.             * See PEAR bug 631             */            $conn = @$connect_function($interface, $dsninfo['username'],                                       false);        } else {            $conn = false;        }        if (!$conn) {            return $this->raiseError(DB_ERROR_CONNECT_FAILED);        }        if ($dsninfo['database']) {            if (!@sybase_select_db($dsninfo['database'], $conn)) {                return $this->raiseError(DB_ERROR_NODBSELECTED, null,                                         null, null, @sybase_get_last_message());            }            $this->_db = $dsninfo['database'];        }        $this->connection = $conn;        return DB_OK;    }    // }}}    // {{{ disconnect()    /**     * Log out and disconnect from the database.     *     * @access public     *     * @return bool true on success, false if not connected.     */    function disconnect()    {        $ret = @sybase_close($this->connection);        $this->connection = null;        return $ret;    }    // }}}    // {{{ errorNative()    /**     * Get the last server error messge (if any)     *     * @return string sybase last error message     */    function errorNative()    {        return @sybase_get_last_message();    }    // }}}    // {{{ errorCode()    /**     * Determine PEAR::DB error code from the database's text error message.     *     * @param  string  $errormsg  error message returned from the database     * @return integer  an error number from a DB error constant     */    function errorCode($errormsg)    {        static $error_regexps;        if (!isset($error_regexps)) {            $error_regexps = array(                '/Incorrect syntax near/'                    => DB_ERROR_SYNTAX,                '/^Unclosed quote before the character string [\"\'].*[\"\']\./'                    => DB_ERROR_SYNTAX,                '/Implicit conversion from datatype [\"\'].+[\"\'] to [\"\'].+[\"\'] is not allowed\./'                    => DB_ERROR_INVALID_NUMBER,                '/Cannot drop the table [\"\'].+[\"\'], because it doesn\'t exist in the system catalogs\./'                    => DB_ERROR_NOSUCHTABLE,                '/Only the owner of object [\"\'].+[\"\'] or a user with System Administrator \(SA\) role can run this command\./'                    => DB_ERROR_ACCESS_VIOLATION,                '/^.+ permission denied on object .+, database .+, owner .+/'                    => DB_ERROR_ACCESS_VIOLATION,                '/^.* permission denied, database .+, owner .+/'                    => DB_ERROR_ACCESS_VIOLATION,                '/[^.*] not found\./'                    => DB_ERROR_NOSUCHTABLE,                '/There is already an object named/'                    => DB_ERROR_ALREADY_EXISTS,                '/Invalid column name/'                    => DB_ERROR_NOSUCHFIELD,                '/does not allow null values/'                    => DB_ERROR_CONSTRAINT_NOT_NULL,                '/Command has been aborted/'                    => DB_ERROR_CONSTRAINT,            );        }        foreach ($error_regexps as $regexp => $code) {            if (preg_match($regexp, $errormsg)) {                return $code;            }        }        return DB_ERROR;    }    // }}}    // {{{ sybaseRaiseError()    /**     * Gather information about an error, then use that info to create a     * DB error object and finally return that object.     *     * @param  integer  $errno  PEAR error number (usually a DB constant) if     *                          manually raising an error     * @return object  DB error object     * @see errorNative()     * @see errorCode()     * @see DB_common::raiseError()     */    function sybaseRaiseError($errno = null)    {        $native = $this->errorNative();        if ($errno === null) {            $errno = $this->errorCode($native);        }        return $this->raiseError($errno, null, null, null, $native);    }    // }}}    // {{{ simpleQuery()    /**     * Send a query to Sybase and return the results as a Sybase resource     * identifier.     *     * @param the SQL query     *     * @access public     *     * @return mixed returns a valid Sybase result for successful SELECT     * queries, DB_OK for other successful queries.  A DB error is     * returned on failure.     */    function simpleQuery($query)    {        $ismanip = DB::isManip($query);        $this->last_query = $query;        if (!@sybase_select_db($this->_db, $this->connection)) {            return $this->sybaseRaiseError(DB_ERROR_NODBSELECTED);        }        $query = $this->modifyQuery($query);        if (!$this->autocommit && $ismanip) {            if ($this->transaction_opcount == 0) {                $result = @sybase_query('BEGIN TRANSACTION', $this->connection);                if (!$result) {                    return $this->sybaseRaiseError();                }            }            $this->transaction_opcount++;        }        $result = @sybase_query($query, $this->connection);        if (!$result) {            return $this->sybaseRaiseError();        }        if (is_resource($result)) {            $numrows = $this->numRows($result);            if (is_object($numrows)) {                return $numrows;            }            $this->num_rows[(int)$result] = $numrows;            return $result;        }        // Determine which queries that should return data, and which        // should return an error code only.        return $ismanip ? DB_OK : $result;    }    // }}}    // {{{ nextResult()    /**     * Move the internal sybase result pointer to the next available result     *     * @param a valid sybase result resource     *     * @access public     *     * @return true if a result is available otherwise return false     */    function nextResult($result)    {        return false;    }    // }}}    // {{{ fetchInto()    /**     * Fetch a row and insert the data into an existing array.     *     * Formating of the array and the data therein are configurable.     * See DB_result::fetchInto() for more information.     *     * @param resource $result    query result identifier     * @param array    $arr       (reference) array where data from the row     *                            should be placed     * @param int      $fetchmode how the resulting array should be indexed     * @param int      $rownum    the row number to fetch     *     * @return mixed DB_OK on success, null when end of result set is     *               reached or on failure     *     * @see DB_result::fetchInto()     * @access private     */    function fetchInto($result, &$arr, $fetchmode, $rownum=null)    {        if ($rownum !== null) {            if (!@sybase_data_seek($result, $rownum)) {                return null;            }        }        if ($fetchmode & DB_FETCHMODE_ASSOC) {            if (function_exists('sybase_fetch_assoc')) {                $arr = @sybase_fetch_assoc($result);            } else {                if ($arr = @sybase_fetch_array($result)) {                    foreach ($arr as $key => $value) {                        if (is_int($key)) {                            unset($arr[$key]);                        }                    }                }            }            if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) {                $arr = array_change_key_case($arr, CASE_LOWER);            }        } else {            $arr = @sybase_fetch_row($result);        }        if (!$arr) {            // reported not work as seems that sybase_get_last_message()            // always return a message here            //if ($errmsg = @sybase_get_last_message()) {            //    return $this->sybaseRaiseError($errmsg);            //} else {                return null;            //}        }        if ($this->options['portability'] & DB_PORTABILITY_RTRIM) {            $this->_rtrimArrayValues($arr);        }        if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) {            $this->_convertNullArrayValuesToEmpty($arr);        }        return DB_OK;    }    // }}}    // {{{ freeResult()    /**     * Free the internal resources associated with $result.     *     * @param $result Sybase result identifier     *     * @access public     *     * @return bool true on success, false if $result is invalid     */    function freeResult($result)    {        unset($this->num_rows[(int)$result]);        return @sybase_free_result($result);    }    // }}}    // {{{ numCols()    /**     * Get the number of columns in a result set.     *     * @param $result Sybase result identifier     *     * @access public     *     * @return int the number of columns per row in $result     */    function numCols($result)    {        $cols = @sybase_num_fields($result);        if (!$cols) {            return $this->sybaseRaiseError();        }        return $cols;    }    // }}}    // {{{ numRows()    /**     * Get the number of rows in a result set.     *     * @param $result Sybase result identifier     *     * @access public     *     * @return int the number of rows in $result     */    function numRows($result)    {        $rows = @sybase_num_rows($result);        if ($rows === false) {            return $this->sybaseRaiseError();        }        return $rows;

⌨️ 快捷键说明

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