如何修复此MySQL错误?

时间:2011-11-30 23:07:05

标签: php mysql

我有一个新闻源的代码,它与一个“加载更多”功能的代码相结合。更新表是新闻源中的更新存在的位置。 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))
{


} 
?>

3 个答案:

答案 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相关联的表。