致命错误:在非对象上调用成员函数fetch_assoc().尝试将产品添加到篮子中


Fatal error: Call to a member function fetch_assoc() on a non-object. Trying to add product to a basket

我正在创建一个在线商店,用户可以在其中订购鞋子,然后将其传递给购物篮,然后用户可以结帐。此刻,我得到致命的错误:调用非对象上的成员函数fetch_assoc(),在checkoutAction.php文件中的这一行'$row = $query->fetch_assoc();'。

checkoutAction.php

     <?php

      include "checkout.php";
      $checkout = new Checkout;
      include "db.php";

    $id = $_REQUEST['equipmentID'];
    $query = $conn->query("Select * from equipment Where equipmentID = ".$id);
    $row = $query->fetch_assoc();
    $data = array('id' => $row['equipmentID'], 'name' => $row['productname'], 'price' => $row['purchaseprice'], qty=> '1');
    $addProduct = $checkout->addToBasket($data);
    $redirect = $addToBasket?'viewBasket.php':'goretex.php';
    header($redirect);

   }

checkout.php

 <?php 
  session_start(); 
  class Checkout {
public function addToBasket($product = array())
{
        $product['quantity'] = (float) $product['quantity'];
        $product['purchaseprice'] = (float) $product['purchaseprice'];
        $equipmentid = md5($product['equipmentID']);

        if($this->saveCheckout())
        {
            return isset($equipmentid) ? $equipmentid : TRUE;
        } else {
            return FALSE;
        }

}
前端Html/

   div class="btn-group">
                <button type="button" id="size" onclick        ="changeColor()"class="btn btn-warning">7</button>
                <button type="button" class="btn btn-warning">8</button>
                <button type="button" class="btn btn-warning">9</button>
                <button type="button" class="btn btn-warning">10</button>
                <button type="button" class="btn btn-warning">11</button>
                <button type="button" class="btn btn-warning">12</button>
                </form>
            </div>
            <br>
            <br>
            <a href="basketAction.php?action=addToBasket&equipmentID=<?php echo $row["equipmentID"]; ?> class="btn btn-info" role="button">Add to Basket</a>
        </div>

这可能是因为您的$conn->query(...)语句返回FALSE。在这里查看mysqli::query文档。如果失败,此方法将返回FALSE,这就是$query->fetch_assoc()抛出错误的原因。

更新您的代码以捕获此失败并显示错误消息,以便您可以进一步调试它。

$query = $conn->query("Select * from equipment Where equipmentID = ".$id);
// If query return FALSE, there's an error.
if (! $query) {
    throw new 'Exception("Database errror: {$conn->error}");
}
$row = $query->fetch_assoc();

假设您正在使用mysqli:您需要检查$conn->query(...)的结果,如果查询失败,它可能返回false(参见http://php.net/manual/en/mysqli.query.php)。

请考虑使用预处理语句,而不是将equipmentId直接放入SQL中,以防止SQL注入。