[英]What am I doing wrong in this query?
一共有三張桌子
我需要檢查用戶是否已經是一個組的成員。 我正在使用此查詢來實現這一點:
SELECT u.id, g.id
FROM users u, groups g
INNER JOIN user_groups ug
ON ug.user_id = u.id AND ug.group_id = g.id
WHERE ug.user_id = ? AND ug.group_id = ?
但這給我拋出了一個錯誤:
Call to a member function bind_param() on boolean in
我檢查了查詢中是否拼錯了單詞,一切都還好。
編輯:
這是一個函數:
public function isUserMember($user_id, $group_id) {
$stmt = $this->conn->prepare("
SELECT u.id, g.id from users u, groups g
INNER JOIN user_groups ug
ON ug.user_id = u.id AND ug.group_id = g.id
WHERE ug.user_id = ? AND ug.group_id = ?");
$stmt->bind_param("ii", $user_id, $group_id); // here i'm getting an error
$stmt->execute();
$stmt->store_result();
$num_rows = $stmt->num_rows;
$stmt->close();
return $num_rows > 0;
}
嘗試以下更改
刪除了與用戶表的不必要的聯接,因為如果您有user_id和group_id,則不需要與用戶表聯接
SELECT ug.id, g.id
from user_groups ug
inner join groups g
on ug.group_id = g.id
WHERE ug.user_id = ? AND ug.group_id = ?
您的特定問題錯誤聲明是:
在布爾值中調用成員函數bind_param()
在:
$stmt->bind_param("ii", $user_id, $group_id);
這意味着在布爾值(true或false bind_param()
上沒有函數bind_param()
,因此這意味着您的$stmt
是布爾值,這意味着定義行的語句已返回FALSE
。
所以:
$stmt = $this->conn->prepare(" SELECT u.id, g.id from users u, groups g INNER JOIN user_groups ug ON ug.user_id = u.id AND ug.group_id = g.id WHERE ug.user_id = ? AND ug.group_id = ?");
這就是問題所在。 其他評論中則指出您的SQL查詢不正確,這將導致布爾失敗,但是, 如果不是SQL查詢本身失敗,則需要確定$this->conn
值已成功生成,並且它是有效的對象實體。
嘗試輸出類似以下內容的錯誤日志:
if(!$stmt = $this->conn->prepare($sql)){
$errorDump = '
Error 1 '.date("r").' :
';
$errorDump .= $this->conn->error;
$errorDump .= "\n\nBacktrace:\n".print_r(debug_backtrace(),TRUE);
$errorDump .= "
SQL: ".$sql;
error_log($errorDump);
unset($errorDump);
return false;
}
....
//carry on with the query as it's ok
上面的代碼有點麻煩,但是當您的$stmt
返回false時,此錯誤報告將告訴您原因。 然后,您可以使用該錯誤信息來解決您的查詢或PHP變量結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.