我正在创建一个在线商店,用户可以在其中订购鞋子,然后将其传递给购物篮,然后用户可以结帐。此刻,我得到致命的错误:调用非对象上的成员函数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注入。