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 の詳細を照会しようとしています。これは、1 人のユーザーがオンラインかどうかのみを示します。あまり役に立ちません。すべてのオンライン ユーザーのリストを取得する場合は、おそらく WHERE 句を削除することをお勧めします。

C) 有意な数のユーザーがいる場合、すべてのオンライン ユーザーのリストはすぐに手に負えなくなる可能性があります。私は、ユーザー数を単純にカウントする方法に戻すことを強くお勧めします (本当に多くの情報が必要な場合は、すべてのオンライン ユーザーのページを使用する可能性があります)。

于 2012-10-04T22:22:55.573 に答える