在将&& in_array($itemID, $userItemIDS)
添加到if语句后,以下方法返回错误。
Fatal error: Call to a member function bind_param() on a non-object
/**
* Deactivate item.
*
* @param (int) $itemID - Variable representing an item's id.
*/
public function deactivate($itemID) {
//get user item ids
$userItemIDS = $this->helperClass->userItemIDS();
if( $q = $this->db->mysqli->prepare("UPDATE items SET active = 0 WHERE id = ?") && in_array($itemID, $userItemIDS) )
{
$q->bind_param("i", $itemID);
$q->execute();
$q->close();
return true;
}
return false;
}
答案 0 :(得分:0)
因为$q
将等于
&&
运算符的布尔结果
in_array
函数(在所有情况下都是布尔值)您需要将作业括起来:
public function deactivate($itemID) {
//get user item ids
$userItemIDS = $this->helperClass->userItemIDS();
if( ($q = $this->db->mysqli->prepare("UPDATE items SET active = 0 WHERE id = ?"))
&& in_array($itemID, $userItemIDS) ) {
$q->bind_param("i", $itemID);
$q->execute();
$q->close();
return true;
}
return false;
}
答案 1 :(得分:0)
我会将呼叫分开prepare
并首先检查以确保呼叫成功:
$q = $this->db->mysqli->prepare("UPDATE items SET active = 0 WHERE id = ?");
if ($q != FALSE && in_array($itemID, $userItemIDS)) {
$q->bind_param("i", $itemID);
$q->execute();
$q->close();
return true;
}
这也将使您的代码更易于阅读和维护。