2011-07-03 9 views
3

userIDがログインしているユーザーと等しいデータベースからすべてのレコードを返そうとしています。MySQLクエリがWHERE値に基づいてデータを選択しない

私は何かを返さない何らかの理由で、次のようなことがありますが、明らかなエラーは誰でも見ることができますか?

<?php 
$interestsquery = "SELECT * 
         FROM user_interests 
        WHERE user_id = $usersClass->userID()"; 
$result = mysql_query($interestsquery); 

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) { 
    echo "{$row['interest']}"; 
} 
?> 
+1

あなたは... –

答えて

4

メソッド呼び出しは、おそらく表現補間区切り文字で囲む必要があり、複雑な十分な式です:

$interestsquery = "SELECT * FROM user_interests WHERE user_id = {$usersClass->userID()}" 

しかし、私はまた、原始的なPHP/MySQLの拡張を放棄し、PDOへの移動をお勧めしますので、あなたが使用することができますクエリパラメータ。文字列の補間を手間をかけずに済ませることができ、SQLインジェクションの脆弱性に耐性のあるコードを書く上でより良い習慣を得ることができます。

$interestsquery = "SELECT * FROM user_interests WHERE user_id = ?" 
$stmt = $pdo->prepare($interestsquery); 
$result = $stmt->execute(array($usersClass->userID())); 
+0

ありがとうビル、私はまだPHPを学ぶので、ここで見ていることのうち、今PDOを読んだり、最初にPHPの基本全体を理解するまで待つのが賢明でしょうか? – Liam

+0

PDOはそれほど難しいことではありません。私は、PDOを使用して、プレーンなmysql拡張が存在することを忘れることをお勧めします。私は彼らがmysql拡張を非難することを望みます。 –

2

これを試してみてください。

$interestsquery = "SELECT * FROM user_interests WHERE user_id =".$usersClass->userID(); 
5

残念ながら、あなたは、関数を呼び出し、彼らがそのように解析されていないことができます。手動で連結するか、変数を設定して解析する必要があります。

"SELECT * FROM user_interests WHERE user_id = " . $usersClass->userID(); 

またはこの:

はこれを試してみてください

$uid = $usersClass->userID(); 
"SELECT * FROM user_interests WHERE user_id = $uid"; 
+1

または ' "SELECT * user_interests FROMのuser_id = {$ usersClass->ユーザーID()}" をデバッグすることができるようにあなたのPHPはMySQLのエラーをキャッチされていないことは明らか;'が、それでも彼はする必要があります引用符を使用して – Rahly

+0

yea ...私は文字列内の関数を呼び出すのが好きではない(はい、私はそれが異なると知っている...何とか...) – cwallenpoole

2

$interestsquery = "SELECT * FROM user_interests 
        WHERE user_id = ".$usersClass->userID(); 

を試してみて、$usersClass->userID()が有効な整数のユーザIDを返すことを確認してください。

関連する問題