mysqli_free_result (): объект класса mysqli_result не может быть преобразован в строку - PullRequest
1 голос
/ 16 июля 2010

Насколько я провел поиск в Google и во всем, похоже, это довольно распространенная проблема, но я не могу ее исправить.Кроме того, я думаю, что у меня немного другое использование этой функции, чем у других.И примерно через 3 часа безуспешно я пишу здесь!

function free_result(){                                        # LINE 48
    $free = "SELECT SHOW DESCRIBE EXPLAIN";                    # LINE 49
    $free = explode(" ", $free);                               # LINE 50
    $sql = $this->sql;                                         # LINE 51
    while(list($key, $value) = each($free)){                   # LINE 52
        if(preg_match("/\b".$value."\b/", $sql)){              # LINE 53
            $result = $this->result;                           # LINE 54
            if(!mysqli_free_result($result)){                  # LINE 55
                $this->errors("Invalid result: <b>{$result}</b>. Couldn't free result."); # LINE 56
            }                                                  # LINE 57
        }                                                      # LINE 58
    }                                                          # LINE 59
}                                                              # LINE 60
                                                               # LINE 61
function query($sql){                                          # LINE 62
    $this->query_id = mysqli_query($this->connection, $sql);   # LINE 63
    $this->result = mysqli_store_result($this->connection);    # LINE 64
    $this->sql = $sql;                                         # LINE 65
    if(!$this->query_id){                                      # LINE 66
        $this->errors("Couldn't query: <b>{$sql}</b>");        # LINE 67
        return 0;                                              # LINE 68
    }                                                          # LINE 69
    $this->affected = mysqli_affected_rows($this->connection); # LINE 70
                                                               # LINE 71
    return $this->query_id;                                    # LINE 72
}                                                              # LINE 73

Это две функции, которые находятся в моем классе базы данных.Но я думаю, что только эти 2 необходимы для решения проблемы.

Итак, ошибка, которую я получаю, такова:

"Warning: mysqli_free_result() expects parameter 1 to be mysqli_result, 
boolean given in [file path]\database.class.php  on line 55"
#followed by my database class error handling
"Invalid result: . Couldn't free result."

Что касается моего понимания, я думаю, чтопроблема в переменной $ result (LINE 54, LINE 64), но поскольку это мое первое приключение с MySQLi, я не совсем уверен.

Надеюсь, вы понимаете проблемуи сможем помочь!Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 16 июля 2010

mysqli_store_result возвращает логическое значение в 2 случаях: для запросов на обновление / вставку / удаление и т. Д. Возвращает true (и эти запросы могут содержать, например, SELECT / SHOW / DESCRIBE / EXPLAIN в строке ) или запрос SELECT / SHOW / DESCRIBE / EXPLAIN завершается неудачно. Проверка $this->sql покажет вам, какой. Если вы настроены освободить эти результаты, просто сделайте более простую проверку перед этим:

 function free_result(){ 
    if($this->result instanceof mysqli_result) $this->result->free();
 }
0 голосов
/ 16 июля 2010

Этот код выглядит правильно, за исключением того, что store_result может вернуть FALSE, если нет набора результатов (например, для вставки) или произошла ошибка. Если mysqli_field_count не равен нулю, должно вернуть набор результатов. Похоже, вы проверяете это с помощью массива $ free (но field_count должен быть быстрее и точнее). Если mysqli_error возвращает непустую строку, произошла ошибка.

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