2011-11-30 14 views
2

我有這個代碼的新聞源,它與一個「加載更多」功能的代碼相結合。更新表是新聞源更新存在的地方。 username_poster是發佈更新的用戶的用戶名,新聞源中顯示的是更新。 $last_msg_id表示新聞傳遞中最後一篇文章的ID,代表接下來要加載的內容。我該如何解決這個MySQL錯誤?

我遇到的問題是每當我的代碼調用這個腳本,它永遠不會加載它。該腳本工作正常,當我有

username_poster IN 
(SELECT user_id FROM scuela_following WHERE follower_id = '".$_SESSION['username']."')` 

的代碼,但只要我添加它,它停止工作。任何幫助將不勝感激。

<?php 
$last_msg_id=$_GET['last_msg_id']; 
$sql=mysql_query("SELECT * FROM updates_table WHERE id < '$last_msg_id' AND username_poster IN 
(SELECT user_id FROM scuela_following WHERE follower_id = '".$_SESSION['username']."') 
ORDER BY id DESC LIMIT 5"); 
$last_msg_id=""; 
while($row=mysql_fetch_array($sql)) 
{ 


} 
?> 
+0

所有我能猜到沒有看到錯誤是...如果username_poster是一個字符串類型和user_id是一個整數,你會有問題。 – Gigi

回答

2

在這個SQL中,當您只選擇「user_id」時,它看起來像是在子查詢中查找「username_poster」。

AND username_poster IN 
    (SELECT user_id 
    FROM scuela_following 

改變SQL認準「user_ID的」,而不是「username_poster」,或返回「username_poster」,而不是在子查詢「USER_ID」。

如上所述,您應該真正使用帶參數的查詢來防止SQL注入。

1

我懷疑這裏有一個問題:

"... WHERE follower_id = '".$_SESSION['username']."' ..." 

首先你是不是正確逃逸,可能有一個SQL注入漏洞。您應該使用mysql_real_escape_string或參數化查詢。其次,它看起來像你在比較用戶名(例如「foobar」)和一個ID(例如10042)。您可能需要加入另一個將用戶名與用戶ID關聯的表。

2

我看到你錯過了session_start();在腳本的最頂端。

相關問題