db.php.svn-base

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· SVN-BASE 代码 · 共 1,115 行 · 第 1/3 页

SVN-BASE
1,115
字号
              $level = E_USER_NOTICE, $debuginfo = null)    {        if (is_int($code)) {            $this->PEAR_Error('DB Error: ' . DB::errorMessage($code), $code, $mode, $level, $debuginfo);        } else {            $this->PEAR_Error("DB Error: $code", DB_ERROR, $mode, $level, $debuginfo);        }    }    // }}}}// }}}// {{{ class DB_result/** * This class implements a wrapper for a DB result set. * A new instance of this class will be returned by the DB implementation * after processing a query that returns data. * * @package  DB * @author Stig Bakken <ssb@php.net> */class DB_result{    // {{{ properties    var $dbh;    var $result;    var $row_counter = null;    /**     * for limit queries, the row to start fetching     * @var integer     */    var $limit_from  = null;    /**     * for limit queries, the number of rows to fetch     * @var integer     */    var $limit_count = null;    // }}}    // {{{ constructor    /**     * DB_result constructor.     * @param resource &$dbh   DB object reference     * @param resource $result  result resource id     * @param array    $options assoc array with optional result options     */    function DB_result(&$dbh, $result, $options = array())    {        $this->dbh = &$dbh;        $this->result = $result;        foreach ($options as $key => $value) {            $this->setOption($key, $value);        }        $this->limit_type  = $dbh->features['limit'];        $this->autofree    = $dbh->options['autofree'];        $this->fetchmode   = $dbh->fetchmode;        $this->fetchmode_object_class = $dbh->fetchmode_object_class;    }    function setOption($key, $value = null)    {        switch ($key) {            case 'limit_from':                $this->limit_from = $value; break;            case 'limit_count':                $this->limit_count = $value; break;        }    }    // }}}    // {{{ fetchRow()    /**     * Fetch a row of data and return it by reference into an array.     *     * The type of array returned can be controlled either by setting this     * method's <var>$fetchmode</var> parameter or by changing the default     * fetch mode setFetchMode() before calling this method.     *     * There are two options for standardizing the information returned     * from databases, ensuring their values are consistent when changing     * DBMS's.  These portability options can be turned on when creating a     * new DB object or by using setOption().     *     *   + <samp>DB_PORTABILITY_LOWERCASE</samp>     *     convert names of fields to lower case     *     *   + <samp>DB_PORTABILITY_RTRIM</samp>     *     right trim the data     *     * @param int $fetchmode  how the resulting array should be indexed     * @param int $rownum     the row number to fetch     *     * @return array  a row of data, null on no more rows or PEAR_Error     *                object on error     *     * @see DB_common::setOption(), DB_common::setFetchMode()     * @access public     */    function &fetchRow($fetchmode = DB_FETCHMODE_DEFAULT, $rownum=null)    {        if ($fetchmode === DB_FETCHMODE_DEFAULT) {            $fetchmode = $this->fetchmode;        }        if ($fetchmode === DB_FETCHMODE_OBJECT) {            $fetchmode = DB_FETCHMODE_ASSOC;            $object_class = $this->fetchmode_object_class;        }        if ($this->limit_from !== null) {            if ($this->row_counter === null) {                $this->row_counter = $this->limit_from;                // Skip rows                if ($this->limit_type == false) {                    $i = 0;                    while ($i++ < $this->limit_from) {                        $this->dbh->fetchInto($this->result, $arr, $fetchmode);                    }                }            }            if ($this->row_counter >= (                    $this->limit_from + $this->limit_count))            {                if ($this->autofree) {                    $this->free();                }                $tmp = null;                return $tmp;            }            if ($this->limit_type == 'emulate') {                $rownum = $this->row_counter;            }            $this->row_counter++;        }        $res = $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum);        if ($res === DB_OK) {            if (isset($object_class)) {                // default mode specified in DB_common::fetchmode_object_class property                if ($object_class == 'stdClass') {                    $arr = (object) $arr;                } else {                    $arr = &new $object_class($arr);                }            }            return $arr;        }        if ($res == null && $this->autofree) {            $this->free();        }        return $res;    }    // }}}    // {{{ fetchInto()    /**     * Fetch a row of data into an array which is passed by reference.     *     * The type of array returned can be controlled either by setting this     * method's <var>$fetchmode</var> parameter or by changing the default     * fetch mode setFetchMode() before calling this method.     *     * There are two options for standardizing the information returned     * from databases, ensuring their values are consistent when changing     * DBMS's.  These portability options can be turned on when creating a     * new DB object or by using setOption().     *     *   + <samp>DB_PORTABILITY_LOWERCASE</samp>     *     convert names of fields to lower case     *     *   + <samp>DB_PORTABILITY_RTRIM</samp>     *     right trim the data     *     * @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 on no more rows or     *                a DB_Error object on error     *     * @see DB_common::setOption(), DB_common::setFetchMode()     * @access public     */    function fetchInto(&$arr, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum=null)    {        if ($fetchmode === DB_FETCHMODE_DEFAULT) {            $fetchmode = $this->fetchmode;        }        if ($fetchmode === DB_FETCHMODE_OBJECT) {            $fetchmode = DB_FETCHMODE_ASSOC;            $object_class = $this->fetchmode_object_class;        }        if ($this->limit_from !== null) {            if ($this->row_counter === null) {                $this->row_counter = $this->limit_from;                // Skip rows                if ($this->limit_type == false) {                    $i = 0;                    while ($i++ < $this->limit_from) {                        $this->dbh->fetchInto($this->result, $arr, $fetchmode);                    }                }            }            if ($this->row_counter >= (                    $this->limit_from + $this->limit_count))            {                if ($this->autofree) {                    $this->free();                }                return null;            }            if ($this->limit_type == 'emulate') {                $rownum = $this->row_counter;            }            $this->row_counter++;        }        $res = $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum);        if ($res === DB_OK) {            if (isset($object_class)) {                // default mode specified in DB_common::fetchmode_object_class property                if ($object_class == 'stdClass') {                    $arr = (object) $arr;                } else {                    $arr = new $object_class($arr);                }            }            return DB_OK;        }        if ($res == null && $this->autofree) {            $this->free();        }        return $res;    }    // }}}    // {{{ numCols()    /**     * Get the the number of columns in a result set.     *     * @return int the number of columns, or a DB error     *     * @access public     */    function numCols()    {        return $this->dbh->numCols($this->result);    }    // }}}    // {{{ numRows()    /**     * Get the number of rows in a result set.     *     * @return int the number of rows, or a DB error     *     * @access public     */    function numRows()    {        return $this->dbh->numRows($this->result);    }    // }}}    // {{{ nextResult()    /**     * Get the next result if a batch of queries was executed.     *     * @return bool true if a new result is available or false if not.     *     * @access public     */    function nextResult()    {        return $this->dbh->nextResult($this->result);    }    // }}}    // {{{ free()    /**     * Frees the resources allocated for this result set.     * @return  int error code     *     * @access public     */    function free()    {        $err = $this->dbh->freeResult($this->result);        if (DB::isError($err)) {            return $err;        }        $this->result = false;        return true;    }    // }}}    // {{{ tableInfo()    /**     * @deprecated     * @internal     * @see DB_common::tableInfo()     */    function tableInfo($mode = null)    {        if (is_string($mode)) {            return $this->dbh->raiseError(DB_ERROR_NEED_MORE_DATA);        }        return $this->dbh->tableInfo($this, $mode);    }    // }}}    // {{{ getRowCounter()    /**     * returns the actual row number     * @return integer     */    function getRowCounter()    {        return $this->row_counter;    }    // }}}}// }}}// {{{ class DB_row/** * Pear DB Row Object * @see DB_common::setFetchMode() */class DB_row{    // {{{ constructor    /**     * constructor     *     * @param resource row data as array     */    function DB_row(&$arr)    {        foreach ($arr as $key => $value) {            $this->$key = &$arr[$key];        }    }    // }}}}// }}}/* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */?>

⌨️ 快捷键说明

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