skeleton.php
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 771 行 · 第 1/2 页
PHP
771 行
<?php// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1998-2004 Manuel Lemos, Tomas V.V.Cox, |// | Stig. S. Bakken, Lukas Smith |// | All rights reserved. |// +----------------------------------------------------------------------+// | MDB is a merge of PEAR DB and Metabases that provides a unified DB |// | API as well as database abstraction for PHP applications. |// | This LICENSE is in the BSD license style. |// | |// | Redistribution and use in source and binary forms, with or without |// | modification, are permitted provided that the following conditions |// | are met: |// | |// | Redistributions of source code must retain the above copyright |// | notice, this list of conditions and the following disclaimer. |// | |// | Redistributions in binary form must reproduce the above copyright |// | notice, this list of conditions and the following disclaimer in the |// | documentation and/or other materials provided with the distribution. |// | |// | Neither the name of Manuel Lemos, Tomas V.V.Cox, Stig. S. Bakken, |// | Lukas Smith nor the names of his contributors may be used to endorse |// | or promote products derived from this software without specific prior|// | written permission. |// | |// | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |// | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |// | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |// | FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |// | REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |// | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |// | BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS|// | OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |// | AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |// | LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY|// | WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |// | POSSIBILITY OF SUCH DAMAGE. |// +----------------------------------------------------------------------+// | Author: YOUR NAME <YOUR EMAIL> |// +----------------------------------------------------------------------+//// $Id: skeleton.php,v 1.16.4.2 2004/03/12 16:19:31 lsmith Exp $//// This is just a skeleton MDB driver.// There may be methods missing as this skeleton is based on the methods// implemented by the MySQL and PostGreSQL drivers in MDB.// Some methods may not have to be implemented in the driver, because the// implementation in common.php is compatible with the given RDBMS.// In each of the listed methods I have added comments that tell you where// to look for a "reference" implementation.// Some of these methods have been expanded or changed slightly in MDB.// Looking in the relevant MDB Wrapper should give you some pointers, some// other difference you will only discover by looking at one of the existing// MDB driver or the common implementation in common.php.// One thing that will definately have to be modified in all "reference"// implementations of Metabase methods is the error handling.// Anyways don't worry if you are having problems: Lukas Smith is here to help!require_once('MDB/Common.php');/** * MDB XXX driver * * @package MDB * @category Database * @author YOUR NAME <YOUR EMAIL> */class MDB_xxx extends MDB_Common{// Most of the class variables are taken from the corresponding Metabase driver.// Few are taken from the corresponding PEAR DB driver.// Some are MDB specific. var $connection = 0; var $connected_host; var $connected_user; var $connected_password; var $connected_port; var $opened_persistent = ''; var $escape_quotes = "\\"; var $decimal_factor = 1.0; var $highest_fetched_row = array(); var $columns = array(); // }}} // {{{ constructor /** * Constructor */ function MDB_xxx() { $this->MDB_common(); $this->phptype = 'xxx'; $this->dbsyntax = 'xxx'; // most of the following codes needs to be taken from the corresponding Metabase driver setup() methods // the error code maps from corresponding PEAR DB driver constructor // also please remember to "register" all driver specific options here like so // $this->options['option_name'] = 'non NULL default value'; } // }}} // {{{ errorNative() /** * Get the native error code of the last error (if any) that * occured on the current connection. * * @access public * * @return int native XXX error code */ function errorNative() { // take this method from the corresponding PEAR DB driver: errorNative() } // }}} // {{{ xxxRaiseError() /** * This method is used to communicate an error and invoke error * callbacks etc. Basically a wrapper for MDB::raiseError * that checks for native error msgs. * * @param integer $errno error code * @param string $message userinfo message * @return object a PEAR error object * @access public * @see PEAR_Error */ function xxxRaiseError($errno = NULL, $message = NULL) { // take this method from the corresponding PEAR DB driver: xxxRaiseError() } // }}} // {{{ autoCommit() /** * Define whether database changes done on the database be automatically * committed. This function may also implicitly start or end a transaction. * * @param boolean $auto_commit flag that indicates whether the database * changes should be committed right after * executing every query statement. If this * argument is 0 a transaction implicitly * started. Otherwise, if a transaction is * in progress it is ended by committing any * database changes that were pending. * * @access public * * @return mixed MDB_OK on success, a MDB error on failure */ function autoCommit($auto_commit) { // take this from the corresponding Metabase driver: AutoCommitTransactions() // the MetabaseShutdownTransactions function is handled by the PEAR desctructor } // }}} // {{{ commit() /** * Commit the database changes done during a transaction that is in * progress. This function may only be called when auto-committing is * disabled, otherwise it will fail. Therefore, a new transaction is * implicitly started after committing the pending changes. * * @access public * * @return mixed MDB_OK on success, a MDB error on failure */ function commit() { // take this from the corresponding Metabase driver: CommitTransaction() } // }}} // {{{ rollback() /** * Cancel any database changes done during a transaction that is in * progress. This function may only be called when auto-committing is * disabled, otherwise it will fail. Therefore, a new transaction is * implicitly started after canceling the pending changes. * * @access public * * @return mixed MDB_OK on success, a MDB error on failure */ function rollback() { // take this from the corresponding Metabase driver: RollbackTransaction() } // }}} // {{{ connect() /** * Connect to the database * * @return TRUE on success, MDB_Error on failure **/ function connect() { // take this from the corresponding Metabase driver: Connect() and Setup() if (PEAR::isError(PEAR::loadExtension($this->phptype))) { return(PEAR::raiseError(NULL, MDB_ERROR_NOT_FOUND, NULL, NULL, 'extension '.$this->phptype.' is not compiled into PHP', 'MDB_Error', TRUE)); } } // }}} // {{{ _close() /** * all the RDBMS specific things needed close a DB connection * * @access private * */ function _close() { // take this from the corresponding Metabase driver: Close() } // }}} // {{{ query() /** * Send a query to the database and return any results * * @access public * * @param string $query the SQL query * @param array $types array that contains the types of the columns in * the result set * * @return mixed a result handle or MDB_OK on success, a MDB error on failure */ function query($query, $types = NULL) { // take this from the corresponding Metabase driver: Query() } // }}} // {{{ subSelect() /** * simple subselect emulation for Mysql * * @access public * * @param string $query the SQL query for the subselect that may only * return a column * @param string $quote determines if the data needs to be quoted before * being returned * * @return string the query */ function subSelect($query, $quote = FALSE) { // This is a new method that only needs to be added if the RDBMS does // not support sub-selects. See the MySQL driver for an example } // }}} // {{{ replace() /** * Execute a SQL REPLACE query. A REPLACE query is identical to a INSERT * query, except that if there is already a row in the table with the same * key field values, the REPLACE query just updates its values instead of * inserting a new row. * * The REPLACE type of query does not make part of the SQL standards. Since * practically only MySQL implements it natively, this type of query is * emulated through this method for other DBMS using standard types of * queries inside a transaction to assure the atomicity of the operation. * * @access public * * @param string $table name of the table on which the REPLACE query will * be executed. * @param array $fields associative array that describes the fields and the * values that will be inserted or updated in the specified table. The * indexes of the array are the names of all the fields of the table. The * values of the array are also associative arrays that describe the * values and other properties of the table fields. * * Here follows a list of field properties that need to be specified: * * Value: * Value to be assigned to the specified field. This value may be * of specified in database independent type format as this * function can perform the necessary datatype conversions. * * Default: * this property is required unless the Null property * is set to 1. * * Type * Name of the type of the field. Currently, all types Metabase * are supported except for clob and blob. * * Default: text * * Null * Boolean property that indicates that the value for this field * should be set to NULL. * * The default value for fields missing in INSERT queries may be * specified the definition of a table. Often, the default value * is already NULL, but since the REPLACE may be emulated using * an UPDATE query, make sure that all fields of the table are * listed in this function argument array. * * Default: 0 * * Key * Boolean property that indicates that this field should be * handled as a primary key or at least as part of the compound * unique index of the table that will determine the row that will * updated if it exists or inserted a new row otherwise. * * This function will fail if no key field is specified or if the * value of a key field is set to NULL because fields that are * part of unique index they may not be NULL. * * Default: 0 * * @return mixed MDB_OK on success, a MDB error on failure */ function replace($table, $fields) { // take this from the corresponding Metabase driver: Replace() } // }}} // {{{ getColumnNames() /** * Retrieve the names of columns returned by the DBMS in a query result. * * @param resource $result result identifier * @return mixed an associative array variable * that will hold the names of columns. The * indexes of the array are the column names * mapped to lower case and the values are the * respective numbers of the columns starting * from 0. Some DBMS may not return any * columns when the result set does not * contain any rows. * * a MDB error on failure * @access public */ function getColumnNames($result) { // take this from the corresponding Metabase driver: GetColumnNames() } // }}} // {{{ numCols() /** * Count the number of columns returned by the DBMS in a query result. * * @param resource $result result identifier * @access public * @return mixed integer value with the number of columns, a MDB error * on failure */ function numCols($result) { // take this from the corresponding Metabase driver: NumberOfColumns()
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?