mdb2.php

来自「This is the script which used on 10minut」· PHP 代码 · 共 1,925 行 · 第 1/5 页

PHP
1,925
字号
        case MDB2_FETCHMODE_OBJECT:
            $this->options['fetch_class'] = $object_class;
        case MDB2_FETCHMODE_ORDERED:
        case MDB2_FETCHMODE_ASSOC:
            $this->fetchmode = $fetchmode;
            break;
        default:
            return $this->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
                'invalid fetchmode mode', __FUNCTION__);
        }

        return MDB2_OK;
    }

    // }}}
    // {{{ function setOption($option, $value)

    /**
     * set the option for the db class
     *
     * @param   string  option name
     * @param   mixed   value for the option
     *
     * @return  mixed   MDB2_OK or MDB2 Error Object
     *
     * @access  public
     */
    function setOption($option, $value)
    {
        if (array_key_exists($option, $this->options)) {
            $this->options[$option] = $value;
            return MDB2_OK;
        }
        return $this->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
            "unknown option $option", __FUNCTION__);
    }

    // }}}
    // {{{ function getOption($option)

    /**
     * Returns the value of an option
     *
     * @param   string  option name
     *
     * @return  mixed   the option value or error object
     *
     * @access  public
     */
    function getOption($option)
    {
        if (array_key_exists($option, $this->options)) {
            return $this->options[$option];
        }
        return $this->raiseError(MDB2_ERROR_UNSUPPORTED, null, null,
            "unknown option $option", __FUNCTION__);
    }

    // }}}
    // {{{ function debug($message, $scope = '', $is_manip = null)

    /**
     * set a debug message
     *
     * @param   string  message that should be appended to the debug variable
     * @param   string  usually the method name that triggered the debug call:
     *                  for example 'query', 'prepare', 'execute', 'parameters',
     *                  'beginTransaction', 'commit', 'rollback'
     * @param   array   contains context information about the debug() call
     *                  common keys are: is_manip, time, result etc.
     *
     * @return void
     *
     * @access  public
     */
    function debug($message, $scope = '', $context = array())
    {
        if ($this->options['debug'] && $this->options['debug_handler']) {
            if (!$this->options['debug_expanded_output']) {
                if (!empty($context['when']) && $context['when'] !== 'pre') {
                    return null;
                }
                $context = empty($context['is_manip']) ? false : $context['is_manip'];
            }
            return call_user_func_array($this->options['debug_handler'], array(&$this, $scope, $message, $context));
        }
        return null;
    }

    // }}}
    // {{{ function getDebugOutput()

    /**
     * output debug info
     *
     * @return  string  content of the debug_output class variable
     *
     * @access  public
     */
    function getDebugOutput()
    {
        return $this->debug_output;
    }

    // }}}
    // {{{ function escape($text)

    /**
     * Quotes a string so it can be safely used in a query. It will quote
     * the text so it can safely be used within a query.
     *
     * @param   string  the input string to quote
     * @param   bool    escape wildcards
     *
     * @return  string  quoted string
     *
     * @access  public
     */
    function escape($text, $escape_wildcards = false)
    {
        if ($escape_wildcards) {
            $text = $this->escapePattern($text);
        }

        $text = str_replace($this->string_quoting['end'], $this->string_quoting['escape'] . $this->string_quoting['end'], $text);
        return $text;
    }

    // }}}
    // {{{ function escapePattern($text)

    /**
     * Quotes pattern (% and _) characters in a string)
     *
     * @param   string  the input string to quote
     *
     * @return  string  quoted string
     *
     * @access  public
     */
    function escapePattern($text)
    {
        if ($this->string_quoting['escape_pattern']) {
            $text = str_replace($this->string_quoting['escape_pattern'], $this->string_quoting['escape_pattern'] . $this->string_quoting['escape_pattern'], $text);
            foreach ($this->wildcards as $wildcard) {
                $text = str_replace($wildcard, $this->string_quoting['escape_pattern'] . $wildcard, $text);
            }
        }
        return $text;
    }

    // }}}
    // {{{ function quoteIdentifier($str, $check_option = false)

    /**
     * Quote a string so it can be safely used as a table or column name
     *
     * Delimiting style depends on which database driver is being used.
     *
     * NOTE: just because you CAN use delimited identifiers doesn't mean
     * you SHOULD use them.  In general, they end up causing way more
     * problems than they solve.
     *
     * NOTE: if you have table names containing periods, don't use this method
     * (@see bug #11906)
     *
     * Portability is broken by using the following characters inside
     * delimited identifiers:
     *   + backtick (<kbd>`</kbd>) -- due to MySQL
     *   + double quote (<kbd>"</kbd>) -- due to Oracle
     *   + brackets (<kbd>[</kbd> or <kbd>]</kbd>) -- due to Access
     *
     * Delimited identifiers are known to generally work correctly under
     * the following drivers:
     *   + mssql
     *   + mysql
     *   + mysqli
     *   + oci8
     *   + pgsql
     *   + sqlite
     *
     * InterBase doesn't seem to be able to use delimited identifiers
     * via PHP 4.  They work fine under PHP 5.
     *
     * @param   string  identifier name to be quoted
     * @param   bool    check the 'quote_identifier' option
     *
     * @return  string  quoted identifier string
     *
     * @access  public
     */
    function quoteIdentifier($str, $check_option = false)
    {
        if ($check_option && !$this->options['quote_identifier']) {
            return $str;
        }
        $str = str_replace($this->identifier_quoting['end'], $this->identifier_quoting['escape'] . $this->identifier_quoting['end'], $str);
        $parts = explode('.', $str);
        foreach (array_keys($parts) as $k) {
            $parts[$k] = $this->identifier_quoting['start'] . $parts[$k] . $this->identifier_quoting['end'];
        }
        return implode('.', $parts);
    }

    // }}}
    // {{{ function getAsKeyword()

    /**
     * Gets the string to alias column
     *
     * @return string to use when aliasing a column
     */
    function getAsKeyword()
    {
        return $this->as_keyword;
    }

    // }}}
    // {{{ function getConnection()

    /**
     * Returns a native connection
     *
     * @return  mixed   a valid MDB2 connection object,
     *                  or a MDB2 error object on error
     *
     * @access  public
     */
    function getConnection()
    {
        $result = $this->connect();
        if (PEAR::isError($result)) {
            return $result;
        }
        return $this->connection;
    }

     // }}}
    // {{{ function _fixResultArrayValues(&$row, $mode)

    /**
     * Do all necessary conversions on result arrays to fix DBMS quirks
     *
     * @param   array   the array to be fixed (passed by reference)
     * @param   array   bit-wise addition of the required portability modes
     *
     * @return  void
     *
     * @access  protected
     */
    function _fixResultArrayValues(&$row, $mode)
    {
        switch ($mode) {
        case MDB2_PORTABILITY_EMPTY_TO_NULL:
            foreach ($row as $key => $value) {
                if ($value === '') {
                    $row[$key] = null;
                }
            }
            break;
        case MDB2_PORTABILITY_RTRIM:
            foreach ($row as $key => $value) {
                if (is_string($value)) {
                    $row[$key] = rtrim($value);
                }
            }
            break;
        case MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES:
            $tmp_row = array();
            foreach ($row as $key => $value) {
                $tmp_row[preg_replace('/^(?:.*\.)?([^.]+)$/', '\\1', $key)] = $value;
            }
            $row = $tmp_row;
            break;
        case (MDB2_PORTABILITY_RTRIM + MDB2_PORTABILITY_EMPTY_TO_NULL):
            foreach ($row as $key => $value) {
                if ($value === '') {
                    $row[$key] = null;
                } elseif (is_string($value)) {
                    $row[$key] = rtrim($value);
                }
            }
            break;
        case (MDB2_PORTABILITY_RTRIM + MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES):
            $tmp_row = array();
            foreach ($row as $key => $value) {
                if (is_string($value)) {
                    $value = rtrim($value);
                }
                $tmp_row[preg_replace('/^(?:.*\.)?([^.]+)$/', '\\1', $key)] = $value;
            }
            $row = $tmp_row;
            break;
        case (MDB2_PORTABILITY_EMPTY_TO_NULL + MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES):
            $tmp_row = array();
            foreach ($row as $key => $value) {
                if ($value === '') {
                    $value = null;
                }
                $tmp_row[preg_replace('/^(?:.*\.)?([^.]+)$/', '\\1', $key)] = $value;
            }
            $row = $tmp_row;
            break;
        case (MDB2_PORTABILITY_RTRIM + MDB2_PORTABILITY_EMPTY_TO_NULL + MDB2_PORTABILITY_FIX_ASSOC_FIELD_NAMES):
            $tmp_row = array();
            foreach ($row as $key => $value) {
                if ($value === '') {
                    $value = null;
                } elseif (is_string($value)) {
                    $value = rtrim($value);
                }
                $tmp_row[preg_replace('/^(?:.*\.)?([^.]+)$/', '\\1', $key)] = $value;
            }
            $row = $tmp_row;
            break;
        }
    }

    // }}}
    // {{{ function &loadModule($module, $property = null, $phptype_specific = null)

    /**
     * loads a module
     *
     * @param   string  name of the module that should be loaded
     *                  (only used for error messages)
     * @param   string  name of the property into which the class will be loaded
     * @param   bool    if the class to load for the module is specific to the
     *                  phptype
     *
     * @return  object  on success a reference to the given module is returned
     *                  and on failure a PEAR error
     *
     * @access  public
     */
    function &loadModule($module, $property = null, $phptype_specific = null)
    {
        if (!$property) {
            $property = strtolower($module);
        }

        if (!isset($this->{$property})) {
            $version = $phptype_specific;
            if ($phptype_specific !== false) {
                $version = true;
                $class_name = 'MDB2_Driver_'.$module.'_'.$this->phptype;
                $file_name = str_replace('_', DIRECTORY_SEPARATOR, $class_name).'.php';
            }
            if ($phptype_specific === false
                || (!MDB2::classExists($class_name) && !MDB2::fileExists($file_name))
            ) {
                $version = false;
                $class_name = 'MDB2_'.$module;
                $file_name = str_replace('_', DIRECTORY_SEPARATOR, $class_name).'.php';
            }

            $err = MDB2::loadClass($class_name, $this->getOption('debug'));
            if (PEAR::isError($err)) {
                return $err;
            }

            // load module in a specific version
            if ($version) {
                if (method_exists($class_name, 'getClassName')) {
                    $class_name_new = call_user_func(array($class_name, 'getClassName'), $this->db_index);
                    if ($class_name != $class_name_new) {
                        $class_name = $class_name_new;
                        $err = MDB2::loadClass($class_name, $this->getOption('debug'));
                        if (PEAR::isError($err)) {
                            return $err;
                        }
                    }
                }
            }

            if (!MDB2::classExists($class_name)) {
                $err =& $this->raiseError(MDB2_ERROR_LOADMODULE, null, null,
                    "unable to load module '$module' into property '$property'", __FUNCTION__);
                return $err;
            }
            $this->{$property} = new $class_name($this->db_index);
            $this->modules[$module] =& $this->{$property};
            if ($version) {
                // this will be used in the connect method to determine if the module
                // needs to be loaded with a different version if th

⌨️ 快捷键说明

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