簡體   English   中英

我在此查詢中做錯了什么?

[英]What am I doing wrong in this query?

一共有三張桌子

  • 存儲用戶詳細信息
  • 存儲組詳細信息
  • 存儲用戶和組ID。

我需要檢查用戶是否已經是一個組的成員。 我正在使用此查詢來實現這一點:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM