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

📄 ibase.php

📁 太烦了
💻 PHP
📖 第 1 页 / 共 2 页
字号:
        array_unshift($data, $stmt);        $res = call_user_func_array('ibase_execute', $data);        if (!$res) {            $tmp =& $this->ibaseRaiseError();            return $tmp;        }        /* XXX need this?        if ($this->autocommit && $this->manip_query[(int)$stmt]) {            @ibase_commit($this->connection);        }*/        if ($this->manip_query[(int)$stmt]) {            $tmp = DB_OK;        } else {            $tmp =& new DB_result($this, $res);        }        return $tmp;    }    /**     * Free the internal resources associated with a prepared query.     *     * @param $stmt The interbase_query resource type     *     * @return bool true on success, false if $result is invalid     */    function freePrepared($stmt)    {        if (!is_resource($stmt)) {            return false;        }        @ibase_free_query($stmt);        unset($this->prepare_tokens[(int)$stmt]);        unset($this->prepare_types[(int)$stmt]);        unset($this->manip_query[(int)$stmt]);        return true;    }    // }}}    // {{{ autoCommit()    function autoCommit($onoff = false)    {        $this->autocommit = $onoff ? 1 : 0;        return DB_OK;    }    // }}}    // {{{ commit()    function commit()    {        return @ibase_commit($this->connection);    }    // }}}    // {{{ rollback()    function rollback()    {        return @ibase_rollback($this->connection);    }    // }}}    // {{{ transactionInit()    function transactionInit($trans_args = 0)    {        return $trans_args ? @ibase_trans($trans_args, $this->connection) : @ibase_trans();    }    // }}}    // {{{ nextId()    /**     * Returns the next free id in a sequence     *     * @param string  $seq_name  name of the sequence     * @param boolean $ondemand  when true, the seqence is automatically     *                           created if it does not exist     *     * @return int  the next id number in the sequence.  DB_Error if problem.     *     * @internal     * @see DB_common::nextID()     * @access public     */    function nextId($seq_name, $ondemand = true)    {        $sqn = strtoupper($this->getSequenceName($seq_name));        $repeat = 0;        do {            $this->pushErrorHandling(PEAR_ERROR_RETURN);            $result =& $this->query("SELECT GEN_ID(${sqn}, 1) "                                   . 'FROM RDB$GENERATORS '                                   . "WHERE RDB\$GENERATOR_NAME='${sqn}'");            $this->popErrorHandling();            if ($ondemand && DB::isError($result)) {                $repeat = 1;                $result = $this->createSequence($seq_name);                if (DB::isError($result)) {                    return $result;                }            } else {                $repeat = 0;            }        } while ($repeat);        if (DB::isError($result)) {            return $this->raiseError($result);        }        $arr = $result->fetchRow(DB_FETCHMODE_ORDERED);        $result->free();        return $arr[0];    }    // }}}    // {{{ createSequence()    /**     * Create the sequence     *     * @param string $seq_name the name of the sequence     * @return mixed DB_OK on success or DB error on error     * @access public     */    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()    /**     * Drop a sequence     *     * @param string $seq_name the name of the sequence     * @return mixed DB_OK on success or DB error on error     * @access public     */    function dropSequence($seq_name)    {        $sqn = strtoupper($this->getSequenceName($seq_name));        return $this->query('DELETE FROM RDB$GENERATORS '                            . "WHERE RDB\$GENERATOR_NAME='${sqn}'");    }    // }}}    // {{{ _ibaseFieldFlags()    /**     * get the Flags of a Field     *     * @param string $field_name the name of the field     * @param string $table_name the name of the table     *     * @return string The flags of the field ("primary_key", "unique_key", "not_null"     *                "default", "computed" and "blob" are supported)     * @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);    }    // }}}    // {{{ 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     * @param int            $mode    a valid tableInfo mode     * @return array  an associative array with the information requested     *                or an error object if something is wrong     * @access public     * @internal     * @see DB_common::tableInfo()     */    function tableInfo($result, $mode = null)    {        if (isset($result->result)) {            /*             * Probably received a result object.             * Extract the result resource identifier.             */            $id = $result->result;            $got_string = false;        } elseif (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;        } else {            /*             * Probably received a result resource identifier.             * Copy it.             * Depricated.  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);        // made this IF due to performance (one if is faster than $count if's)        if (!$mode) {            for ($i=0; $i<$count; $i++) {                $info = @ibase_field_info($id, $i);                $res[$i]['table'] = $got_string ? $case_func($result) : '';                $res[$i]['name']  = $case_func($info['name']);                $res[$i]['type']  = $info['type'];                $res[$i]['len']   = $info['length'];                $res[$i]['flags'] = ($got_string) ? $this->_ibaseFieldFlags($info['name'], $result) : '';            }        } else { // full            $res['num_fields']= $count;            for ($i=0; $i<$count; $i++) {                $info = @ibase_field_info($id, $i);                $res[$i]['table'] = $got_string ? $case_func($result) : '';                $res[$i]['name']  = $case_func($info['name']);                $res[$i]['type']  = $info['type'];                $res[$i]['len']   = $info['length'];                $res[$i]['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;    }    // }}}    // {{{ ibaseRaiseError()    /**     * Gather information about an error, then use that info to create a     * DB error object and finally return that object.     *     * @param  integer  $db_errno  PEAR error number (usually a DB constant) if     *                             manually raising an error     * @param  string  $native_errmsg  text of error message if known     * @return object  DB error object     * @see DB_common::errorCode()     * @see DB_common::raiseError()     */    function &ibaseRaiseError($db_errno = null, $native_errmsg = null)    {        if ($native_errmsg === null) {            $native_errmsg = @ibase_errmsg();        }        // memo for the interbase php module hackers: we need something similar        // to mysql_errno() to retrieve error codes instead of this ugly hack        if (preg_match('/^([^0-9\-]+)([0-9\-]+)\s+(.*)$/', $native_errmsg, $m)) {            $native_errno = (int)$m[2];        } else {            $native_errno = null;        }        // try to map the native error to the DB one        if ($db_errno === null) {            if ($native_errno) {                // try to interpret Interbase error code (that's why we need ibase_errno()                // in the interbase module to return the real error code)                switch ($native_errno) {                    case -204:                        if (is_int(strpos($m[3], 'Table unknown'))) {                            $db_errno = DB_ERROR_NOSUCHTABLE;                        }                        break;                    default:                        $db_errno = $this->errorCode($native_errno);                }            } else {                $error_regexps = array(                    '/[tT]able not found/' => DB_ERROR_NOSUCHTABLE,                    '/[tT]able .* already exists/' => DB_ERROR_ALREADY_EXISTS,                    '/validation error for column .* value "\*\*\* null/' => DB_ERROR_CONSTRAINT_NOT_NULL,                    '/violation of [\w ]+ constraint/' => DB_ERROR_CONSTRAINT,                    '/conversion error from string/' => DB_ERROR_INVALID_NUMBER,                    '/no permission for/' => DB_ERROR_ACCESS_VIOLATION,                    '/arithmetic exception, numeric overflow, or string truncation/' => DB_ERROR_DIVZERO                );                foreach ($error_regexps as $regexp => $code) {                    if (preg_match($regexp, $native_errmsg)) {                        $db_errno = $code;                        $native_errno = null;                        break;                    }                }            }        }        $tmp =& $this->raiseError($db_errno, null, null, null, $native_errmsg);        return $tmp;    }    // }}}}/* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */?>

⌨️ 快捷键说明

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