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

📄 sqlstore.php

📁 简介:IceBB是一个强大
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php/** * SQL-backed OpenID stores. * * PHP versions 4 and 5 * * LICENSE: See the COPYING file included in this distribution. * * @package OpenID * @author JanRain, Inc. <openid@janrain.com> * @copyright 2005 Janrain, Inc. * @license http://www.gnu.org/copyleft/lesser.html LGPL *//** * Require the PEAR DB module because we'll need it for the SQL-based * stores implemented here.  We silence any errors from the inclusion * because it might not be present, and a user of the SQL stores may * supply an Auth_OpenID_DatabaseConnection instance that implements * its own storage. */global $__Auth_OpenID_PEAR_AVAILABLE;$__Auth_OpenID_PEAR_AVAILABLE = @include_once 'DB.php';/** * @access private */require_once 'Auth/OpenID/Interface.php';require_once 'Auth/OpenID/Nonce.php';/** * @access private */require_once 'Auth/OpenID.php';/** * @access private */require_once 'Auth/OpenID/Nonce.php';/** * This is the parent class for the SQL stores, which contains the * logic common to all of the SQL stores. * * The table names used are determined by the class variables * associations_table_name and nonces_table_name.  To change the name * of the tables used, pass new table names into the constructor. * * To create the tables with the proper schema, see the createTables * method. * * This class shouldn't be used directly.  Use one of its subclasses * instead, as those contain the code necessary to use a specific * database.  If you're an OpenID integrator and you'd like to create * an SQL-driven store that wraps an application's database * abstraction, be sure to create a subclass of * {@link Auth_OpenID_DatabaseConnection} that calls the application's * database abstraction calls.  Then, pass an instance of your new * database connection class to your SQLStore subclass constructor. * * All methods other than the constructor and createTables should be * considered implementation details. * * @package OpenID */class Auth_OpenID_SQLStore extends Auth_OpenID_OpenIDStore {    /**     * This creates a new SQLStore instance.  It requires an     * established database connection be given to it, and it allows     * overriding the default table names.     *     * @param connection $connection This must be an established     * connection to a database of the correct type for the SQLStore     * subclass you're using.  This must either be an PEAR DB     * connection handle or an instance of a subclass of     * Auth_OpenID_DatabaseConnection.     *     * @param associations_table: This is an optional parameter to     * specify the name of the table used for storing associations.     * The default value is 'oid_associations'.     *     * @param nonces_table: This is an optional parameter to specify     * the name of the table used for storing nonces.  The default     * value is 'oid_nonces'.     */    function Auth_OpenID_SQLStore($connection,                                  $associations_table = null,                                  $nonces_table = null)    {        global $__Auth_OpenID_PEAR_AVAILABLE;        $this->associations_table_name = "oid_associations";        $this->nonces_table_name = "oid_nonces";        // Check the connection object type to be sure it's a PEAR        // database connection.        if (!(is_object($connection) &&              (is_subclass_of($connection, 'db_common') ||               is_subclass_of($connection,                              'auth_openid_databaseconnection')))) {            trigger_error("Auth_OpenID_SQLStore expected PEAR connection " .                          "object (got ".get_class($connection).")",                          E_USER_ERROR);            return;        }        $this->connection = $connection;        // Be sure to set the fetch mode so the results are keyed on        // column name instead of column index.  This is a PEAR        // constant, so only try to use it if PEAR is present.  Note        // that Auth_Openid_Databaseconnection instances need not        // implement ::setFetchMode for this reason.        if ($__Auth_OpenID_PEAR_AVAILABLE) {            $this->connection->setFetchMode(DB_FETCHMODE_ASSOC);        }        if ($associations_table) {            $this->associations_table_name = $associations_table;        }        if ($nonces_table) {            $this->nonces_table_name = $nonces_table;        }        $this->max_nonce_age = 6 * 60 * 60;        // Be sure to run the database queries with auto-commit mode        // turned OFF, because we want every function to run in a        // transaction, implicitly.  As a rule, methods named with a        // leading underscore will NOT control transaction behavior.        // Callers of these methods will worry about transactions.        $this->connection->autoCommit(false);        // Create an empty SQL strings array.        $this->sql = array();        // Call this method (which should be overridden by subclasses)        // to populate the $this->sql array with SQL strings.        $this->setSQL();        // Verify that all required SQL statements have been set, and        // raise an error if any expected SQL strings were either        // absent or empty.        list($missing, $empty) = $this->_verifySQL();        if ($missing) {            trigger_error("Expected keys in SQL query list: " .                          implode(", ", $missing),                          E_USER_ERROR);            return;        }        if ($empty) {            trigger_error("SQL list keys have no SQL strings: " .                          implode(", ", $empty),                          E_USER_ERROR);            return;        }        // Add table names to queries.        $this->_fixSQL();    }    function tableExists($table_name)    {        return !$this->isError(                      $this->connection->query(                          sprintf("SELECT * FROM %s LIMIT 0",                                  $table_name)));    }    /**     * Returns true if $value constitutes a database error; returns     * false otherwise.     */    function isError($value)    {        return PEAR::isError($value);    }    /**     * Converts a query result to a boolean.  If the result is a     * database error according to $this->isError(), this returns     * false; otherwise, this returns true.     */    function resultToBool($obj)    {        if ($this->isError($obj)) {            return false;        } else {            return true;        }    }    /**     * This method should be overridden by subclasses.  This method is     * called by the constructor to set values in $this->sql, which is     * an array keyed on sql name.     */    function setSQL()    {    }    /**     * Resets the store by removing all records from the store's     * tables.     */    function reset()    {        $this->connection->query(sprintf("DELETE FROM %s",                                         $this->associations_table_name));        $this->connection->query(sprintf("DELETE FROM %s",                                         $this->nonces_table_name));    }    /**     * @access private     */    function _verifySQL()    {        $missing = array();        $empty = array();        $required_sql_keys = array(                                   'nonce_table',                                   'assoc_table',                                   'set_assoc',                                   'get_assoc',                                   'get_assocs',                                   'remove_assoc'                                   );        foreach ($required_sql_keys as $key) {            if (!array_key_exists($key, $this->sql)) {                $missing[] = $key;            } else if (!$this->sql[$key]) {                $empty[] = $key;            }        }        return array($missing, $empty);    }    /**     * @access private     */    function _fixSQL()    {        $replacements = array(                              array(                                    'value' => $this->nonces_table_name,                                    'keys' => array('nonce_table',                                                    'add_nonce',                                                    'clean_nonce')                                    ),                              array(                                    'value' => $this->associations_table_name,                                    'keys' => array('assoc_table',                                                    'set_assoc',                                                    'get_assoc',                                                    'get_assocs',                                                    'remove_assoc',                                                    'clean_assoc')                                    )                              );        foreach ($replacements as $item) {            $value = $item['value'];            $keys = $item['keys'];            foreach ($keys as $k) {                if (is_array($this->sql[$k])) {                    foreach ($this->sql[$k] as $part_key => $part_value) {                        $this->sql[$k][$part_key] = sprintf($part_value,                                                            $value);                    }                } else {                    $this->sql[$k] = sprintf($this->sql[$k], $value);                }            }        }

⌨️ 快捷键说明

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