mysqli - ошибка выборки массива вызов функции-члена 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() в не-объекте в строке рядом со строкой условия while. Я попытался погуглить его и не получил результата по своей проблеме. Надеюсь, мой вопрос ясен. заранее спасибо.
2 answers
Всегда проверяйте наличие ошибок при выполнении запроса.
И, пожалуйста, не растягивайте свой код излишне длинными переменными
$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 при сбое. Для успешного ВЫБОРА, ОТОБРАЖЕНИЯ, ОПИСАНИЯ или ОБЪЯСНЕНИЯ запросов mysqli_query() вернет объект mysqli_result. Для других успешных запросов mysqli_query() вернет значение TRUE.