我有一个新闻源的代码,它与一个“加载更多”功能的代码相结合。更新表是新闻源中的更新存在的位置。 username_poster
是发布更新的人员的用户名,其中显示在新闻源中。 $last_msg_id
表示新闻源中最后一个帖子的ID,用于表示接下来要加载的内容。
我遇到的问题是每当我的代码调用此脚本时,它都不会加载它。当我有
时,脚本工作正常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 :(得分:2)
我发现您错过了脚本顶部的session_start();
。
答案 1 :(得分: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注入。
答案 2 :(得分:1)
我怀疑这里有问题:
"... WHERE follower_id = '".$_SESSION['username']."' ..."
首先,您没有正确转义,并且可能存在SQL注入漏洞。您应该使用mysql_real_escape_string
或参数化查询。
其次,看起来您正在将用户名(例如“foobar”)与ID(例如10042)进行比较。您可能需要加入另一个将用户名与用户ID相关联的表。