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

📄 ifx.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.               |// +----------------------------------------------------------------------+// | Author: Tomas V.V.Cox <cox@idecnet.com>                              |// | Maintainer: Daniel Convissor <danielc@php.net>                       |// +----------------------------------------------------------------------+//// $Id: ifx.php,v 1.2 2005/07/22 05:10:13 max Exp $// Legend:// For more info on Informix errors see:// http://www.informix.com/answers/english/ierrors.htm//// TODO://  - set needed env Informix vars on connect//  - implement native prepare/executerequire_once PEAR_DIR . 'DB/common.php';/** * Database independent query interface definition for PHP's Informix * extension. * * @package  DB * @version  $Id: ifx.php,v 1.2 2005/07/22 05:10:13 max Exp $ * @category Database * @author   Tomas V.V.Cox <cox@idecnet.com> */class DB_ifx extends DB_common{    // {{{ properties    var $connection;    var $affected = 0;    var $dsn = array();    var $transaction_opcount = 0;    var $autocommit = true;    var $fetchmode = DB_FETCHMODE_ORDERED; /* Default fetch mode */    // }}}    // {{{ constructor    function DB_ifx()    {        $this->phptype = 'ifx';        $this->dbsyntax = 'ifx';        $this->features = array(            'prepare' => false,            'pconnect' => true,            'transactions' => true,            'limit' => 'emulate'        );        $this->errorcode_map = array(            '-201'    => DB_ERROR_SYNTAX,            '-206'    => DB_ERROR_NOSUCHTABLE,            '-217'    => DB_ERROR_NOSUCHFIELD,            '-239'    => DB_ERROR_CONSTRAINT,            '-253'    => DB_ERROR_SYNTAX,            '-292'    => DB_ERROR_CONSTRAINT_NOT_NULL,            '-310'    => DB_ERROR_ALREADY_EXISTS,            '-329'    => DB_ERROR_NODBSELECTED,            '-346'    => DB_ERROR_CONSTRAINT,            '-386'    => DB_ERROR_CONSTRAINT_NOT_NULL,            '-391'    => DB_ERROR_CONSTRAINT_NOT_NULL,            '-554'    => DB_ERROR_SYNTAX,            '-691'    => DB_ERROR_CONSTRAINT,            '-703'    => DB_ERROR_CONSTRAINT_NOT_NULL,            '-1204'   => DB_ERROR_INVALID_DATE,            '-1205'   => DB_ERROR_INVALID_DATE,            '-1206'   => DB_ERROR_INVALID_DATE,            '-1209'   => DB_ERROR_INVALID_DATE,            '-1210'   => DB_ERROR_INVALID_DATE,            '-1212'   => DB_ERROR_INVALID_DATE,            '-1213'   => DB_ERROR_INVALID_NUMBER,        );    }    // }}}    // {{{ 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     *     * @return int DB_OK on success, a DB error code on failure     */    function connect($dsninfo, $persistent = false)    {        if (!DB::assertExtension('informix') &&            !DB::assertExtension('Informix'))        {            return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND);        }        $this->dsn = $dsninfo;        $dbhost = $dsninfo['hostspec'] ? '@' . $dsninfo['hostspec'] : '';        $dbname = $dsninfo['database'] ? $dsninfo['database'] . $dbhost : '';        $user = $dsninfo['username'] ? $dsninfo['username'] : '';        $pw = $dsninfo['password'] ? $dsninfo['password'] : '';        $connect_function = $persistent ? 'ifx_pconnect' : 'ifx_connect';        $this->connection = @$connect_function($dbname, $user, $pw);        if (!is_resource($this->connection)) {            return $this->ifxraiseError(DB_ERROR_CONNECT_FAILED);        }        return DB_OK;    }    // }}}    // {{{ disconnect()    /**     * Log out and disconnect from the database.     *     * @return bool true on success, false if not connected.     */    function disconnect()    {        $ret = @ifx_close($this->connection);        $this->connection = null;        return $ret;    }    // }}}    // {{{ simpleQuery()    /**     * Send a query to Informix and return the results as a     * Informix resource identifier.     *     * @param $query the SQL query     *     * @return int returns a valid Informix result for successful SELECT     * queries, DB_OK for other successful queries.  A DB error code     * is returned on failure.     */    function simpleQuery($query)    {        $ismanip = DB::isManip($query);        $this->last_query = $query;        $this->affected   = null;        if (preg_match('/(SELECT)/i', $query)) {    //TESTME: Use !DB::isManip()?            // the scroll is needed for fetching absolute row numbers            // in a select query result            $result = @ifx_query($query, $this->connection, IFX_SCROLL);        } else {            if (!$this->autocommit && $ismanip) {                if ($this->transaction_opcount == 0) {                    $result = @ifx_query('BEGIN WORK', $this->connection);                    if (!$result) {                        return $this->ifxraiseError();                    }                }                $this->transaction_opcount++;            }            $result = @ifx_query($query, $this->connection);        }        if (!$result) {            return $this->ifxraiseError();        }        $this->affected = @ifx_affected_rows($result);        // Determine which queries should return data, and which        // should return an error code only.        if (preg_match('/(SELECT)/i', $query)) {            return $result;        }        // XXX Testme: free results inside a transaction        // may cause to stop it and commit the work?        // Result has to be freed even with a insert or update        @ifx_free_result($result);        return DB_OK;    }    // }}}    // {{{ nextResult()    /**     * Move the internal ifx 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;    }    // }}}    // {{{ affectedRows()    /**     * Gets the number of rows affected by the last query.     * if the last query was a select, returns 0.     *     * @return number of rows affected by the last query     */    function affectedRows()    {        if (DB::isManip($this->last_query)) {            return $this->affected;        } else {            return 0;        }    }    // }}}    // {{{ 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) && ($rownum < 0)) {            return null;        }        if ($rownum === null) {            /*             * Even though fetch_row() should return the next row  if             * $rownum is null, it doesn't in all cases.  Bug 598.             */            $rownum = 'NEXT';        } else {            // Index starts at row 1, unlike most DBMS's starting at 0.            $rownum++;        }        if (!$arr = @ifx_fetch_row($result, $rownum)) {            return null;        }        if ($fetchmode !== DB_FETCHMODE_ASSOC) {            $i=0;            $order = array();            foreach ($arr as $val) {                $order[$i++] = $val;            }            $arr = $order;        } elseif ($fetchmode == DB_FETCHMODE_ASSOC &&                  $this->options['portability'] & DB_PORTABILITY_LOWERCASE)        {            $arr = array_change_key_case($arr, CASE_LOWER);        }        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;    }    // }}}    // {{{ numRows()

⌨️ 快捷键说明

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