2016-06-28 18 views
1

は、ユーザーIDとグループIDを保存する3つのテーブル、このクエリで何が間違っていますか?

  • 保存するユーザの詳細
  • 保存グループ詳細
  • があります。

ユーザーが既に1つのグループのメンバーであるかどうかを確認する必要があります。私はそれを達成するために、このクエリを使用しています:

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 

私は私のクエリにいくつかの単語をスペルミスしている場合、私がチェックしていると、すべてが大丈夫です。

編集:ここでは

が関数である:あなたがUSER_IDとGROUP_IDしている場合は、それに参加する必要がないため

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; 
} 
+1

質問に関連するPHPコードを投稿できますか? – Matt

+1

それは質問ではない、私はあなたが正しく文を準備していないと思う.. –

+0

データベース接続の確立からクエリの準備/実行まで、実際のコードが必要です。 –

答えて

1

次試してみてくださいは、ユーザー表との結合不要な削除

を変更ユーザーとの連絡

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 = ? 
+1

あなたが行った変更は何ですか? **あなたの答えを編集してコンテキストを追加してください – Martin

+0

1行目にPHPの解析エラーが発生します。 – Jocelyn

+0

@Jocelyn病気をチェックしてください。 –

1

問題の具体的な内容は次のとおりです。

Call to a member function bind_param() on boolean in

で:

$stmt->bind_param("ii", $user_id, $group_id); 

これが意味するブール値(trueまたはfalse)には何の機能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値が正常に生成されていることを確認する必要があります有効なオブジェクトエンティティです。

出力するなどのエラーログに何か試してみてください。このエラー報告になぜあなたを教えてくれますときに$stmt falseを返し上記

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 

はビット迅速かつ汚いですが。 そのエラー情報を使用して、クエリまたはPHP変数構造を解決できます。

+0

あなたの答えはよく説明されていますが、私のクエリが私にこの問題を引き起こしていることがわかりました。とにかくありがとう! –

+1

私はあなたに将来のエラーや問題を見つける方法を示してみましたが、今度はエラーを見つけたかもしれませんが、ここで述べたことを取り入れてください。 - )@DusanDimitrijevic – Martin

+0

これらのヒントのための@Martinありがとう:) –

関連する問題