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

📄 sqlite.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: Urs Gehrig <urs@circle.ch>                                  |// |          Mika Tuupola <tuupola@appelsiini.net>                       |// | Maintainer: Daniel Convissor <danielc@php.net>                       |// +----------------------------------------------------------------------+//// $Id: sqlite.php,v 1.2 2005/07/22 05:10:14 max Exp $require_once PEAR_DIR . 'DB/common.php';/** * Database independent query interface definition for the SQLite * PECL extension. * * @package  DB * @version  $Id: sqlite.php,v 1.2 2005/07/22 05:10:14 max Exp $ * @category Database * @author   Urs Gehrig <urs@circle.ch> * @author   Mika Tuupola <tuupola@appelsiini.net> */class DB_sqlite extends DB_common{    // {{{ properties    var $connection;    var $phptype, $dbsyntax;    var $prepare_tokens = array();    var $prepare_types = array();    var $_lasterror = '';    // }}}    // {{{ constructor    /**     * Constructor for this class.     *     * Error codes according to sqlite_exec.  Error Codes specification is     * in the {@link http://sqlite.org/c_interface.html online manual}.     *     * This errorhandling based on sqlite_exec is not yet implemented.     *     * @access public     */    function DB_sqlite()    {        $this->DB_common();        $this->phptype = 'sqlite';        $this->dbsyntax = 'sqlite';        $this->features = array (            'prepare' => false,            'pconnect' => true,            'transactions' => false,            'limit' => 'alter'        );        // SQLite data types, http://www.sqlite.org/datatypes.html        $this->keywords = array (            'BLOB'      => '',            'BOOLEAN'   => '',            'CHARACTER' => '',            'CLOB'      => '',            'FLOAT'     => '',            'INTEGER'   => '',            'KEY'       => '',            'NATIONAL'  => '',            'NUMERIC'   => '',            'NVARCHAR'  => '',            'PRIMARY'   => '',            'TEXT'      => '',            'TIMESTAMP' => '',            'UNIQUE'    => '',            'VARCHAR'   => '',            'VARYING'   => ''        );        $this->errorcode_map = array(        );    }    // }}}    // {{{ connect()    /**     * Connect to a database represented by a file.     *     * @param $dsn the data source name; the file is taken as     *        database; "sqlite://root:@host/test.db?mode=0644"     * @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('sqlite')) {            return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND);        }        $this->dsn = $dsninfo;        if ($dsninfo['database']) {            if (!file_exists($dsninfo['database'])) {                if (!touch($dsninfo['database'])) {                    return $this->sqliteRaiseError(DB_ERROR_NOT_FOUND);                }                if (!isset($dsninfo['mode']) ||                    !is_numeric($dsninfo['mode']))                {                    $mode = 0644;                } else {                    $mode = octdec($dsninfo['mode']);                }                if (!chmod($dsninfo['database'], $mode)) {                    return $this->sqliteRaiseError(DB_ERROR_NOT_FOUND);                }                if (!file_exists($dsninfo['database'])) {                    return $this->sqliteRaiseError(DB_ERROR_NOT_FOUND);                }            }            if (!is_file($dsninfo['database'])) {                return $this->sqliteRaiseError(DB_ERROR_INVALID);            }            if (!is_readable($dsninfo['database'])) {                return $this->sqliteRaiseError(DB_ERROR_ACCESS_VIOLATION);            }        } else {            return $this->sqliteRaiseError(DB_ERROR_ACCESS_VIOLATION);        }        $connect_function = $persistent ? 'sqlite_popen' : 'sqlite_open';        if (!($conn = @$connect_function($dsninfo['database']))) {            return $this->sqliteRaiseError(DB_ERROR_NODBSELECTED);        }        $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.     * @todo fix return values     */    function disconnect()    {        $ret = @sqlite_close($this->connection);        $this->connection = null;        return $ret;    }    // }}}    // {{{ simpleQuery()    /**     * Send a query to SQLite and returns the results as a SQLite resource     * identifier.     *     * @param the SQL query     * @access public     * @return mixed returns a valid SQLite 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;        $query = $this->_modifyQuery($query);//        ini_set('track_errors', true);        $result = @sqlite_query($query, $this->connection);        ini_restore('track_errors');        $this->_lasterror = isset($php_errormsg) ? $php_errormsg : '';        $this->result = $result;        if (!$this->result) {            return $this->sqliteRaiseError(null);        }        /* sqlite_query() seems to allways return a resource */        /* so cant use that. Using $ismanip instead          */        if (!$ismanip) {            $numRows = $this->numRows($result);            /* if numRows() returned PEAR_Error */            if (is_object($numRows)) {                return $numRows;            }            return $result;        }        return DB_OK;    }    // }}}    // {{{ nextResult()    /**     * Move the internal sqlite result pointer to the next available result.     *     * @param a valid sqlite 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 (!@sqlite_seek($this->result, $rownum)) {                return null;            }        }        if ($fetchmode & DB_FETCHMODE_ASSOC) {            $arr = @sqlite_fetch_array($result, SQLITE_ASSOC);            if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) {                $arr = array_change_key_case($arr, CASE_LOWER);            }        } else {            $arr = @sqlite_fetch_array($result, SQLITE_NUM);        }        if (!$arr) {            /* See: http://bugs.php.net/bug.php?id=22328 */            return null;        }        if ($this->options['portability'] & DB_PORTABILITY_RTRIM) {            /*             * Even though this DBMS already trims output, we do this because             * a field might have intentional whitespace at the end that             * gets removed by DB_PORTABILITY_RTRIM under another driver.             */            $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 SQLite result identifier     * @access public     * @return bool true on success, false if $result is invalid     */    function freeResult(&$result)    {        // XXX No native free?        if (!is_resource($result)) {            return false;        }        $result = null;        return true;    }    // }}}    // {{{ numCols()    /**     * Gets the number of columns in a result set.     *     * @return number of columns in a result set     */    function numCols($result)    {        $cols = @sqlite_num_fields($result);        if (!$cols) {            return $this->sqliteRaiseError();        }        return $cols;    }    // }}}    // {{{ numRows()    /**     * Gets the number of rows affected by a query.     *     * @return number of rows affected by the last query     */    function numRows($result)    {        $rows = @sqlite_num_rows($result);        if (!is_integer($rows)) {            return $this->raiseError();        }        return $rows;    }    // }}}    // {{{ affected()    /**     * Gets the number of rows affected by a query.     *     * @return number of rows affected by the last query     */    function affectedRows()    {        return @sqlite_changes($this->connection);    }    // }}}    // {{{ errorNative()

⌨️ 快捷键说明

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