2011-07-03 45 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

显见的是你的PHP没有赶上MySQL的错误,所以,你可以调试... –

回答

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 * FROM user_interests其中USER_ID = {$ usersClass->用户ID()}”;'但他仍然应该是使用引用函数 – Rahly

+0

是的...我不喜欢调用函数内部的字符串(是的,我知道它是不同的,但是......不知何故...) – cwallenpoole

2

尝试

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

并确保$usersClass->userID()返回一个有效的整数用户ID。