【问题标题】:Fatal error: call to a member function fetch_array() on boolean [duplicate]致命错误:在布尔值上调用成员函数 fetch_array() [重复]
【发布时间】:2016-09-24 02:57:36
【问题描述】:

我在尝试执行我的 php 脚本时遇到错误:

致命错误:在布尔值中调用成员函数 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;
}

【问题讨论】:

  • 我相信我找到了问题所在。看看我的回答
  • 你能添加if(!$backup) print_r($mysqli->error);这一行并向我们展示任何输出...
  • “字段列表”中的未知列“p.price_sync”-按照建议添加行后得到的输出。 @ImClarky
  • @Nancy 好吧,这应该会给你你需要的信息。 price_snyc 列在 oc_product 表中不存在,或者有类似错字的东西...
  • @Nancy - 查看this question。看看是否有帮助:)

标签: php mysql mysqli


【解决方案1】:

php documentation,MySQLi::query() 将:

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

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

$mysqli->query($bup);

这又意味着 sql 语句 $bup 导致错误。我建议审查它和你的桌子。似乎该错误不是语法错误(因为语法错误会导致更早的错误消息),这意味着 MySQL 可以读取您的语句,但由于某种原因操作失败。你必须检查你的 SQL 语句以及你的表,看看逻辑中的缺陷是什么。

【讨论】:

  • 感谢您的回复,我会遵循您的建议,看看它会把我引向何方。 @ImClarky - 也感谢您的回复。我会尝试发布输出。
  • 感谢您的帮助,您说的都是对的,这对解决我的问题帮助很大。我真的很感激! @ImClarky 错误出现在 $mysqli->query($bup);在我打印错误后,它显示某些列丢失了。所以我添加了它们,在一些权限问题(某些文件没有正确的权限)之后,一切正常。
猜你喜欢
  • 1970-01-01
  • 2017-06-07
  • 2018-05-06
  • 2015-02-08
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
相关资源
最近更新 更多