一尘不染

mysqli-对非对象mysqli上的成员函数fetch_array()的fetch_Array错误调用

mysql

我是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();

在这里,我收到此错误,调用while条件行旁边的非对象上的成员函数fetch_array()。我尝试使用Google搜索,但没有得到解决我的问题的结果。希望我的问题清楚。提前致谢。


阅读 244

收藏
2020-05-17

共1个答案

一尘不染

运行查询时始终检查错误。
而且,请不要使用不必要的长变量来扩展代码

$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错误

顺便说一句,将所有临时变量移到某种帮助函数中是一种好习惯,使您的应用程序代码像下面两行一样简单

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

这将使您的代码更短,更易读。

2020-05-17