2011-07-03 44 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。