Ошибка при удалении из OCI db-> oci_fetch_array (): ORA-24374 - PullRequest
0 голосов
/ 08 мая 2019

Я получаю эту ошибку:

": oci_fetch_array (): ORA-24374: определить, что не было выполнено перед извлечением или выполнением, и извлекать в"

из строки header.php 46.

Код из header.php

public function dbQuerySafe($statement, $format = '', $args = array(), $outvar = '')
    {
        $config = include('includes/config.php');
        $res = '';
        $connectionString = $config['database']['tnsstring'];
        $username = $config['database']['user'];
        $password = $config['database']['password'];
        $connobj = oci_connect($username, $password, $connectionString);
        $error = false;
        $result = false;

        if (!$connobj) {
            $e = oci_error();
            trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
            exit();
        }
        //print_r($statement);
        $stid = oci_parse($connobj, $statement);
        if ($stid) {
            if (!empty($format) && !empty($args)) {
                foreach ($args as $key => $val) {

                    oci_bind_by_name($stid, $key, $args[$key]);
                }
            }
            if ($format == 'insert' && !empty($outvar)) {
                oci_bind_by_name($stid, ':' . $outvar, $res, 32);
            }
            $rsltflag = oci_execute($stid);

            if ($rsltflag && $format != 'insert') {
                $result = array();
            //line 46 is below
                while (($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) != false) {
                    foreach ($row as $key => $val) {
                        $c[$key] = $val;
                    }
                    $result[] = $c;
                }
            } else if ($rsltflag && $format == 'insert') {
                $result = $res;
            } else {
                $result = false;
                $error = oci_error($stid);

                $log = new Logger('header.php- line 57');
                $log->pushHandler(new StreamHandler(dirname(__FILE__) . './log/db_queries.log', Logger::ERROR));
                // $log->error($error['message'] . '. SQL query which caused the error: ' . $error['sqltext']);
                $log->error("Error connecting to database: ", array('username' => $username, 'module' => $_SERVER['PHP_SELF'], 'page_name' => 'header.php', 'error_at' => 'line 57', 'severity' => 'ERROR', 'error_msg' => $error['message'] . '. SQL query which caused the error: ' . substr($error['sqltext'], 0, 250)));

                trigger_error(htmlentities($error['message'], ENT_QUOTES), E_USER_ERROR);
            }
        }

        oci_free_statement($stid);
        oci_close($connobj);
        return array($result, $error);
    }

Код, который вызывает эту функцию, является этой функцией:

    public function deleteOldErrorLogEntries()
    {
        list($q, $error) = $this->dbQuerySafe("
            DELETE FROM WAM_ERROR_LOG
            WHERE TIME_OCCURRED < sysdate -5
        ", 'ss');

        if (!$error) {
            return array($q, false);
        } else {
            return array(false, $error);
        }

        // list($q_cnidel, $error_cnidel) = $this->dbQuerySafe(
        //  "DELETE FROM cni_map WHERE OBJID = :caseid",
        //  'ss',
        //  array(':caseid' =>  $caseid)
    }

Который вызывается кнопкой на странице .php.

Код все еще выполняется и выполняет то, что запрашивается (удаляет записи из таблицы). Однако это повторяет вышеуказанную ошибку на странице.

Я не писал функцию соединения OCI (dbQuerySafe) из header.php, так как я взял на себя промежуточный проект от другого разработчика. Тем не мение. Какие-нибудь мысли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...