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

Vig*_*nan 6 php mysql database 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();
Run Code Online (Sandbox Code Playgroud)

这里我得到这个错误调用一个成员函数fetch_array()在条件行旁边的行上的非对象上.我试过谷歌搜索它并没有得到我的问题的结果.希望我的问题很明确.提前致谢.

You*_*nse 17

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

$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;
}
Run Code Online (Sandbox Code Playgroud)

看,第一个变量只包含程序中没有特殊含义的SQL代码,它将被放置在下一行.
第二个变量包含mysqli结果.没有特别的意义了.可以使用传统名称.
临时$row变量也是如此.
在代码中唯一具有特殊含义的变量是$arrChartData[]- 所以,给它有意义的名称.您需要在填充之前初始化它.

并注意trigger_error将mysqli错误转换为PHP错误的部分.始终以这种方式运行查询,以获得所有mysql错误的通知

顺便说一句,最好通过将所有临时变量移动到某种辅助函数中来消除所有临时变量,使您的应用程序代码像下面两行一样简单

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

它将使您的代码更短,更易读.

  • 这是解释这个的好方法,+ 1. (4认同)

lc.*_*lc. 8

查询可能失败并mysqli::query返回FALSE.因此$runGetChartData不是一个mysqli_result对象,而是一个boolean,这就是你得到错误的原因.

文档:

失败时返回FALSE.对于成功的SELECT,SHOW,DESCRIBE或EXPLAIN查询,mysqli_query()将返回一个mysqli_result对象.对于其他成功的查询,mysqli_query()将返回TRUE.