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

时间:2013-02-01 04:54:40

标签: 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();

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

2 个答案:

答案 0 :(得分: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;
}

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

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

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

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

它会使您的代码更短,更易读。

答案 1 :(得分:8)

查询可能失败,mysqli::query返回FALSE。因此$runGetChartData不是mysqli_result对象,而是boolean,这就是您收到错误的原因。

来自the documentation

  

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