ibase.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 1,072 行 · 第 1/3 页

PHP
1,072
字号
        }        $arr = $result->fetchRow(DB_FETCHMODE_ORDERED);        $result->free();        return $arr[0];    }    // }}}    // {{{ createSequence()    /**     * Creates a new sequence     *     * @param string $seq_name  name of the new sequence     *     * @return int  DB_OK on success.  A DB_Error object on failure.     *     * @see DB_common::createSequence(), DB_common::getSequenceName(),     *      DB_ibase::nextID(), DB_ibase::dropSequence()     */    function createSequence($seq_name)    {        $sqn = strtoupper($this->getSequenceName($seq_name));        $this->pushErrorHandling(PEAR_ERROR_RETURN);        $result = $this->query("CREATE GENERATOR ${sqn}");        $this->popErrorHandling();        return $result;    }    // }}}    // {{{ dropSequence()    /**     * Deletes a sequence     *     * @param string $seq_name  name of the sequence to be deleted     *     * @return int  DB_OK on success.  A DB_Error object on failure.     *     * @see DB_common::dropSequence(), DB_common::getSequenceName(),     *      DB_ibase::nextID(), DB_ibase::createSequence()     */    function dropSequence($seq_name)    {        return $this->query('DELETE FROM RDB$GENERATORS '                            . "WHERE RDB\$GENERATOR_NAME='"                            . strtoupper($this->getSequenceName($seq_name))                            . "'");    }    // }}}    // {{{ _ibaseFieldFlags()    /**     * Get the column's flags     *     * Supports "primary_key", "unique_key", "not_null", "default",     * "computed" and "blob".     *     * @param string $field_name  the name of the field     * @param string $table_name  the name of the table     *     * @return string  the flags     *     * @access private     */    function _ibaseFieldFlags($field_name, $table_name)    {        $sql = 'SELECT R.RDB$CONSTRAINT_TYPE CTYPE'               .' FROM RDB$INDEX_SEGMENTS I'               .'  JOIN RDB$RELATION_CONSTRAINTS R ON I.RDB$INDEX_NAME=R.RDB$INDEX_NAME'               .' WHERE I.RDB$FIELD_NAME=\'' . $field_name . '\''               .'  AND UPPER(R.RDB$RELATION_NAME)=\'' . strtoupper($table_name) . '\'';        $result = @ibase_query($this->connection, $sql);        if (!$result) {            return $this->ibaseRaiseError();        }        $flags = '';        if ($obj = @ibase_fetch_object($result)) {            @ibase_free_result($result);            if (isset($obj->CTYPE)  && trim($obj->CTYPE) == 'PRIMARY KEY') {                $flags .= 'primary_key ';            }            if (isset($obj->CTYPE)  && trim($obj->CTYPE) == 'UNIQUE') {                $flags .= 'unique_key ';            }        }        $sql = 'SELECT R.RDB$NULL_FLAG AS NFLAG,'               .'  R.RDB$DEFAULT_SOURCE AS DSOURCE,'               .'  F.RDB$FIELD_TYPE AS FTYPE,'               .'  F.RDB$COMPUTED_SOURCE AS CSOURCE'               .' FROM RDB$RELATION_FIELDS R '               .'  JOIN RDB$FIELDS F ON R.RDB$FIELD_SOURCE=F.RDB$FIELD_NAME'               .' WHERE UPPER(R.RDB$RELATION_NAME)=\'' . strtoupper($table_name) . '\''               .'  AND R.RDB$FIELD_NAME=\'' . $field_name . '\'';        $result = @ibase_query($this->connection, $sql);        if (!$result) {            return $this->ibaseRaiseError();        }        if ($obj = @ibase_fetch_object($result)) {            @ibase_free_result($result);            if (isset($obj->NFLAG)) {                $flags .= 'not_null ';            }            if (isset($obj->DSOURCE)) {                $flags .= 'default ';            }            if (isset($obj->CSOURCE)) {                $flags .= 'computed ';            }            if (isset($obj->FTYPE)  && $obj->FTYPE == 261) {                $flags .= 'blob ';            }        }        return trim($flags);    }    // }}}    // {{{ ibaseRaiseError()    /**     * Produces a DB_Error object regarding the current problem     *     * @param int $errno  if the error is being manually raised pass a     *                     DB_ERROR* constant here.  If this isn't passed     *                     the error information gathered from the DBMS.     *     * @return object  the DB_Error object     *     * @see DB_common::raiseError(),     *      DB_ibase::errorNative(), DB_ibase::errorCode()     */    function &ibaseRaiseError($errno = null)    {        if ($errno === null) {            $errno = $this->errorCode($this->errorNative());        }        $tmp =& $this->raiseError($errno, null, null, null, @ibase_errmsg());        return $tmp;    }    // }}}    // {{{ errorNative()    /**     * Gets the DBMS' native error code produced by the last query     *     * @return int  the DBMS' error code.  NULL if there is no error code.     *     * @since Method available since Release 1.7.0     */    function errorNative()    {        if (function_exists('ibase_errcode')) {            return @ibase_errcode();        }        if (preg_match('/^Dynamic SQL Error SQL error code = ([0-9-]+)/i',                       @ibase_errmsg(), $m)) {            return (int)$m[1];        }        return null;    }    // }}}    // {{{ errorCode()    /**     * Maps native error codes to DB's portable ones     *     * @param int $nativecode  the error code returned by the DBMS     *     * @return int  the portable DB error code.  Return DB_ERROR if the     *               current driver doesn't have a mapping for the     *               $nativecode submitted.     *     * @since Method available since Release 1.7.0     */    function errorCode($nativecode = null)    {        if (isset($this->errorcode_map[$nativecode])) {            return $this->errorcode_map[$nativecode];        }        static $error_regexps;        if (!isset($error_regexps)) {            $error_regexps = array(                '/generator .* is not defined/'                    => DB_ERROR_SYNTAX,  // for compat. w ibase_errcode()                '/table.*(not exist|not found|unknown)/i'                    => DB_ERROR_NOSUCHTABLE,                '/table .* already exists/i'                    => DB_ERROR_ALREADY_EXISTS,                '/unsuccessful metadata update .* failed attempt to store duplicate value/i'                    => DB_ERROR_ALREADY_EXISTS,                '/unsuccessful metadata update .* not found/i'                    => DB_ERROR_NOT_FOUND,                '/validation error for column .* value "\*\*\* null/i'                    => DB_ERROR_CONSTRAINT_NOT_NULL,                '/violation of [\w ]+ constraint/i'                    => DB_ERROR_CONSTRAINT,                '/conversion error from string/i'                    => DB_ERROR_INVALID_NUMBER,                '/no permission for/i'                    => DB_ERROR_ACCESS_VIOLATION,                '/arithmetic exception, numeric overflow, or string truncation/i'                    => DB_ERROR_INVALID,            );        }        $errormsg = @ibase_errmsg();        foreach ($error_regexps as $regexp => $code) {            if (preg_match($regexp, $errormsg)) {                return $code;            }        }        return DB_ERROR;    }    // }}}    // {{{ tableInfo()    /**     * Returns information about a table or a result set     *     * NOTE: only supports 'table' and 'flags' if <var>$result</var>     * is a table name.     *     * @param object|string  $result  DB_result object from a query or a     *                                 string containing the name of a table.     *                                 While this also accepts a query result     *                                 resource identifier, this behavior is     *                                 deprecated.     * @param int            $mode    a valid tableInfo mode     *     * @return array  an associative array with the information requested.     *                 A DB_Error object on failure.     *     * @see DB_common::tableInfo()     */    function tableInfo($result, $mode = null)    {        if (is_string($result)) {            /*             * Probably received a table name.             * Create a result resource identifier.             */            $id = @ibase_query($this->connection,                               "SELECT * FROM $result WHERE 1=0");            $got_string = true;        } elseif (isset($result->result)) {            /*             * Probably received a result object.             * Extract the result resource identifier.             */            $id = $result->result;            $got_string = false;        } else {            /*             * Probably received a result resource identifier.             * Copy it.             * Deprecated.  Here for compatibility only.             */            $id = $result;            $got_string = false;        }        if (!is_resource($id)) {            return $this->ibaseRaiseError(DB_ERROR_NEED_MORE_DATA);        }        if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) {            $case_func = 'strtolower';        } else {            $case_func = 'strval';        }        $count = @ibase_num_fields($id);        $res   = array();        if ($mode) {            $res['num_fields'] = $count;        }        for ($i = 0; $i < $count; $i++) {            $info = @ibase_field_info($id, $i);            $res[$i] = array(                'table' => $got_string ? $case_func($result) : '',                'name'  => $case_func($info['name']),                'type'  => $info['type'],                'len'   => $info['length'],                'flags' => ($got_string)                            ? $this->_ibaseFieldFlags($info['name'], $result)                            : '',            );            if ($mode & DB_TABLEINFO_ORDER) {                $res['order'][$res[$i]['name']] = $i;            }            if ($mode & DB_TABLEINFO_ORDERTABLE) {                $res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i;            }        }        // free the result only if we were called on a table        if ($got_string) {            @ibase_free_result($id);        }        return $res;    }    // }}}    // {{{ getSpecialQuery()    /**     * Obtains the query string needed for listing a given type of objects     *     * @param string $type  the kind of objects you want to retrieve     *     * @return string  the SQL query string or null if the driver doesn't     *                  support the object type requested     *     * @access protected     * @see DB_common::getListOf()     */    function getSpecialQuery($type)    {        switch ($type) {            case 'tables':                return 'SELECT DISTINCT R.RDB$RELATION_NAME FROM '                       . 'RDB$RELATION_FIELDS R WHERE R.RDB$SYSTEM_FLAG=0';            case 'views':                return 'SELECT DISTINCT RDB$VIEW_NAME from RDB$VIEW_RELATIONS';            case 'users':                return 'SELECT DISTINCT RDB$USER FROM RDB$USER_PRIVILEGES';            default:                return null;        }    }    // }}}}/* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */?>

⌨️ 快捷键说明

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