mysqli – вызов ошибки fetch_Array для функции-члена fetch_array () для не-объекта mysqli

Я новичок в mysqli и начал пытаться изучать основные вещи. Что касается этого примера ( http://php.net/manual/en/mysqli-result.fetch-array.php ), я пытался fetch_array. Вот мой код.

$sqlGetChartData = "SELECT date, ratepersqft, location FROM ratepersqft WHERE project_id = 1"; $runGetChartData = $mysqli->query($sqlGetChartData); while($rowGetChartData = $runGetChartData->fetch_array(MYSQLI_BOTH)) $arrGetChartData[] = $rowGetChartData; print "<pre>"; print_r($arrGetChartData); exit(); 

Здесь я получаю эту ошибку. Вызовите функцию-член fetch_array () для не-объекта в строке рядом с линией условия. Я попытался найти его и не получил результата для своей проблемы. Надеюсь, мой вопрос ясен. Заранее спасибо.

Всегда проверяйте наличие ошибок при выполнении запроса.
И, пожалуйста, не растягивайте свой код с ненужными длинными переменными

 $arrChartData[] = array(); $sql = "SELECT date, ratepersqft, location FROM ratepersqft WHERE project_id = 1"; $res = $mysqli->query($sql) or trigger_error($mysqli->error."[$sql]"); while($row = $res->fetch_assoc()) { $arrChartData[] = $row; } 

Посмотрите, первая переменная содержит только код SQL, не имеющий особого значения в вашей программе, и будет размещаться на следующей строке.
Вторая переменная содержит результат mysqli. Без особого смысла. Можно использовать обычное имя.
То же самое касается временной переменной $row .
Единственная переменная, которая имеет особый смысл в вашем коде, – $arrChartData[] – поэтому дайте это значащее имя. Вы должны инициализировать его перед заполнением.

Обратите внимание на trigger_error который преобразует ошибку mysqli в ошибку PHP. Всегда запускайте свои запросы таким образом, чтобы получать уведомления обо всех ошибках mysql

Кстати, это хорошая практика, чтобы избавиться от всех временных переменных, переместив их в какую-то вспомогательную функцию, сделав код приложения простым, как следующие 2 строки

 $sql = "SELECT date, ratepersqft, location FROM ratepersqft WHERE project_id = 1"; $arrChartData[] = dbGetAll($sql); 

Это сделает ваш код короче и читабельнее.

Вероятно, запрос завершился неудачно, и mysqli::query вернул FALSE. Поэтому $runGetChartData не является объектом mysqli_result , а является boolean , поэтому вы получаете свою ошибку.

Из документации :

Возвращает FALSE при ошибке. Для успешных запросов SELECT, SHOW, DESCRIBE или EXPLAIN mysqli_query () вернет объект mysqli_result. Для других успешных запросов mysqli_query () вернет TRUE.