Я новичок в 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.