2017-01-31 9 views
2

私は約3時間を探していますが、多くの人が同様のエラーを抱えていますが、回答が見つかりませんこの問題をまだ解決する方法について。私は "あなたの質問は偽を返しているに違いない"と言っている人からのたくさんの反応を見るが、それは助けにならない。私は約1週間ほどmysqlとphpを使用していたので、私は非常に素人です。PHPとMYSQL致命的なエラー:booleanのメンバー関数fetch_assoc()を呼び出す

$ count変数を目的のために入れて、正しい数の行を返すかどうかを確認しますが、whileループはエラーを返します。それは私のテーブルには現在2行があります。合計3つの列(id、User1、User2)もあります。

複数の行を配列に格納する方法についてGoogle検索をした後、fetch_assoc()は一度に1行しか返さないため、すべての応答ではwhileループを使用すると言います。

このコードを修正する方法や、mysql検索の複数の行を配列に読み込むためにどのようなコードを使用できるか教えてもらえますか?

$i = 0; 
    $stmt1 = $this->conn->prepare("SELECT * FROM friends WHERE User1 = ? OR User2 = ?"); 
    $stmt1->bind_param("ss", $myuid, $myuid); 

    if ($stmt1->execute()) { 
     $stmt1->store_result(); 
     $count = $stmt1->num_rows; 

     while(($row = $stmt1->get_result()->fetch_assoc()) !== FALSE){ 
      if ($row['User1'] == $myuid) { 
       $friends[$i]= $row['User2']; 
       $i++; 
      } else if ($row['User2'] == $myuid){ 
       $friends[$i] = $row['User1']; 
       $i++; 
       } 
     } 

     $stmt1->close(); 
+0

あなたはプリペアドステートメントを使用しているので、私は 'あなたが結果をバインドし、'しばらく($ stmt->()をフェッチ)を使用したいと思います。フレンドテーブルにはいくつの列がありますか?あなたが*を使用する代わりにそれらをリストアップしない理由はありますか? ' –

+0

'!== FALSE'のようにしないでください。これらの関数は、論理的に真である値を返すように設計されています。あなたが厄介な状況に陥っていることを知っている場合にのみ、その重い尺度を採用してください。また、 'get_result()'は、あなたが実際に動かすことのできる値を返すと仮定しています。 – tadman

+0

合計3つの列があります。私はそれらを列挙することができますが、このコードでは違いはありません。 – MildewMan

答えて

1

私はそれを最終的に動作させることができました。 @bio_sprite - 結果をバインドするヒントのためにありがとう。ここで私が使用したコードは次のとおりです。

$friends = array(); 
    $i = 0; 
    $stmt1 = $this->conn->prepare("SELECT User1, User2 FROM friends WHERE User1 = ? OR User2 = ?"); 
    $stmt1->bind_param("ss", $myuid, $myuid); 

    if ($stmt1->execute()) { 
     $stmt1->bind_result($User1, $User2); 

     while($stmt1->fetch()){ 

      if ($User1 != $myuid) { 
       $friends[$i]= $User1; 
       $i++; 
      } else if ($User2 != $myuid){ 
       $friends[$i]= $User2; 
       $i++; 
       } 
     } 

     $stmt1->close(); 

     return $friends; 
1

rowCount()はあなたにフェッチされた行の数を与える取得のためにも

$i = 0; 
    $stmt1 = $this->conn->prepare("SELECT * FROM friends WHERE User1 = ? OR User2 = ?"); 
    $stmt1->bind_param("ss", $myuid, $myuid); 

    if ($stmt1->execute()) { 
     $count = $stmt1->rowCount();; 

     while($row = $stmt1->fetch()){ // you can also try $result = $sth->fetchAll(); for getting all the result 
      if ($row['User1'] == $myuid) { 
       $friends[$i]= $row['User2']; 
       $i++; 
      } else if ($row['User2'] == $myuid){ 
       $friends[$i] = $row['User1']; 
       $i++; 
       } 
     } 

     $stmt1->close(); 

クエリの結果を取得するためfetch()を使用してみてください。

+0

提案していただきありがとうございます。私はfetch()を使うとデータが得られないようです。構文の残りの部分はオフになっているかもしれませんが、$ row ['User1']と$ row ['User2']呼び出しはnull値を返します。私もrowCount()を動作させることができませんでした。 2つのセミコロンを置いたことに気付きましたが、そのうちの1つをオフにしたときにエラーが返されました。 – MildewMan

関連する問題