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. Я попытался погуглить его и не получил результата по своей проблеме. Надеюсь, мой вопрос ясен. заранее спасибо.

Author: Vignesh Gopalakrishnan, 2013-02-01

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);

Это сделает ваш код короче и более читаемый.

 17
Author: Your Common Sense, 2016-07-20 16:10:36

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

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

Возвращает FALSE при сбое. Для успешного ВЫБОРА, ОТОБРАЖЕНИЯ, ОПИСАНИЯ или ОБЪЯСНЕНИЯ запросов mysqli_query() вернет объект mysqli_result. Для других успешных запросов mysqli_query() вернет значение TRUE.

 8
Author: lc., 2013-02-01 05:33:40