php – 致命错误:在布尔值上调用成员函数fetch_array()

我正在尝试执行我的PHP脚本时遇到“致命错误:在boolean in …中调用成员函数fetch_array()”错误.有问题的代码在这里

function backup()
{
    global $MysqLi;

    $bup        = "SELECT p.product_id, p.ean, p.image, p.model,  p.status, p.price_sync, p.modified_by, p.date_modified, pd.name, pd.description, pd.language_id, pd.Meta_description, pd.Meta_keyword, pd.tag FROM oc_product p INNER JOIN oc_product_description pd ON p.product_id = pd.product_id";
    $backup     = $MysqLi->query($bup);
    $megainsert = "REPLACE INTO oc_product_backup(product_id, ean, image, model,  status, price_sync, modified_by, date_modified, name, description, language_id, Meta_description, Meta_keyword, tag) VALUES ";

    while($row  = $backup->fetch_array(MysqLI_ASSOC))
    {
        $product_id       = $MysqLi->real_escape_string($row['product_id']);
        $ean              = $MysqLi->real_escape_string($row['ean']);
        $image            = $MysqLi->real_escape_string($row['image']);
        $model            = $MysqLi->real_escape_string($row['model']);
        $name             = $MysqLi->real_escape_string($row['name']);
        $description      = $MysqLi->real_escape_string($row['description']);
        $Meta_description = $MysqLi->real_escape_string($row['Meta_description']);
        $Meta_keyword     = $MysqLi->real_escape_string($row['Meta_keyword']);
        $tag              = $MysqLi->real_escape_string($row['tag']);

        $megainsert      .= "('".$product_id."', '".$ean."', '".$image."', '".$model."',  '".$row['status']."', '".$row['price_sync']."', '".$row['modified_by']."', '".$row['date_modified']."', '".$name."', '".$description."', '".$row['language_id']."', '".$Meta_description."', '".$Meta_keyword."', '".$tag."'),";
    }

    $backup->close();
    $megainsert = substr_replace($megainsert, "", -1);
    $dobackup   = $MysqLi->query($megainsert);
    if(!$dobackup) return $MysqLi->error;
    else return true;
}

以下行是问题所在:

while($row  = $backup->fetch_array(MysqLI_ASSOC))

上述函数之前的代码如下:

   function clearBackupPrices()
{
    global $MysqLi;

    $clean   = "TruncATE TABLE oc_product_price_backup";
    $doclean = $MysqLi->query($clean);
    if(!$doclean) return $MysqLi->error;
    else return true;
}

我研究并用同样的问题研究了其他答案,但没有运气解决它.有人对我的问题有任何建议吗?谢谢大家.

解决方法:

php documentation开始,MysqLi :: query()将:

Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or
EXPLAIN queries MysqLi_query() will return a MysqLi_result object. For
other successful queries MysqLi_query() will return TRUE.

这意味着以下查询失败(因此使$backup = FALSE而不是解释错误语句的对象):

$MysqLi->query($bup);

这反过来意味着sql语句$bup导致错误.我建议您查看它和您的表格.似乎错误不是语法错误(因为语法错误会导致更早的错误消息),这意味着MysqL可以读取您的语句,但由于某种原因操作失败.您将不得不检查您的sql语句以及您的表,并查看逻辑中的缺陷.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...