0

我正在尝试在线显示用户列表。而且我有一个 sql,但在我的页面上它说“您的 SQL 语法有错误;请检查与您的 MySQL 服务器版本相对应的手册,以便在第 8 行的 '' 附近使用正确的语法”,我想知道怎么做我显示没有任何错误的用户列表。

<?php $sql = "SELECT
        user_id,
        user_name,          
        online
    FROM
        users
    WHERE
        user_id = " . mysql_real_escape_string($_GET['id']);

$result = mysql_query($sql);

if(!$result)
{
echo 'There are currently no user online.' . mysql_error();
}
else
{
if(mysql_num_rows($result) == 0)
{
    echo 'There are currently no user online.';
}
else
{
    //display category data
    while($row = mysql_fetch_assoc($result))
    { $D= $row['online']; 
    if( ($D) !=1)
    {
    echo 'There are currently no user online.';
}
else
{ 
         echo'<a href="/index.php?area=profile&userid=' .   $posts_row['user_id'] . '" class="topicuser_member"><span ' . $posts_row['user_class'] .  '>' . $posts_row['user_name'] . '</span></a>,';}}}}?>
4

3 回答 3

1

您需要在 where 子句中为字符串加上引号:

$sql = "SELECT
    user_id,
    user_name,
    online
FROM
    users
WHERE
    user_id = '" . mysql_real_escape_string($_GET['id']) . "'";
于 2012-10-04T22:17:00.970 回答
0

变量“id”是否已定义?另外,如果您尝试获取在线用户列表,则您的 sql 查询错误,应该是

$sql = "SELECT
    user_id,
    user_name,          
    online
FROM
    users
WHERE
    //here you should have the online column       
    online = online" or whatever the online value you have set
于 2012-10-04T22:21:17.853 回答
0

A) 手动字符串转义是一个坏主意,如果您忘记这样做,就会让您对 SQL 注入持开放态度。删除 mysql_real_escape_string() 并考虑将PDO与绑定变量一起使用,这样您就不必再担心它了。

B) 您正在尝试查询单个用户 ID 的详细信息。这只会告诉您单个用户是否在线。不是很有用。如果您要获取所有在线用户的列表,您可能只想删除 WHERE 子句。

C) 如果您有任何有意义的用户数量,所有在线用户的列表可能会迅速失控。我强烈建议退回到用户的直接计数(如果有人真的想要那么多信息,可能会有一个包含所有在线用户的页面)。

于 2012-10-04T22:22:55.573 回答