2016-09-04 8 views
-1

Iは、2つのテーブル、usercategoryPHPを解決するにはどうすればいいですか?致命的なエラー:メンバ関数fetch_assoc()を呼び出しますか?

ユーザテーブルを有する:

enter image description here

カテゴリテーブル:userテーブルで

enter image description here

user_idが主キーであり、またとして機能します外部キーはcategoryです。

私はジョン・グリシャムによってタイトルのリストを表示したいが、私は取得しています:

Fatal error: Call to a member function fetch_assoc() on boolean in C:\wamp64\www\listprimarykeys.php on line 16 

16行目は次のとおりです。

while($rows = $resultSet->fetch_assoc()) 

は、ここに私のコードです。私のSELECTのステートメントは問題ありませんか?

<?php 

$username = "John Grisham"; 

require_once('dbConnect.php'); 

$resultSet = $mysqli->query("SELECT cat_name FROM category INNER JOIN user ON category.user_id = user.user_id WHERE user.username = $username"); 

while($rows = $resultSet->fetch_assoc()) 

    { 
     $user_id = $rows['cat_name']; 
     echo "<p>categories are $user_id"; 

    } 

?> 
+1

これはここだけでSOで約5649365836倍に答えてきました。 – arkascha

+2

クエリに_any_エラーチェックを実装していません。あなたはそれがうまくいくと盲目的に信じています。それが失敗した場合、 '$ resultSet'は' false'です... – arkascha

+1

**警告**:mysqliを使用する場合は、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli .quickstart.prepared-statements.php)と['bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)を使ってクエリにユーザーデータを追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'や' $ _GET'データを直接クエリに入れないでください。誰かがあなたのミスを悪用しようとすると、非常に危険です。 – tadman

答えて

3

私はこの問題をくすぐった。クエリーの問題がある場合は、の引用符の前後に、変数$usernameとクエリ文字列を追加する必要があります。

このコード権:

<?php 

$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "test"; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$username = "ali" ; 
$sql = "SELECT catname FROM category INNER JOIN user ON category.user_id = user.id WHERE user.username = '$username' "; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo " Name: " . $row["catname"]. "<br>"; 
    } 
} else { 
    echo "0 results"; 
} 
$conn->close(); 


?> 

この作品は防止SQLインジェクションのためのMySQLiをでこのメソッドを使用して重要な優れている場合は:http://php.net/manual/en/mysqli.prepare.php

+0

これはありがとう、ありがとうございました。 PHPを始めるだけですが、私はSQLインジェクションをもっと見なければなりません。 – CHarris

+0

:)。どういたしまして 。 –

関連する問題