0

streamdata_feedbackテーブル内のuser2_idsを含む行数のみを出力しようとしていますが、user2_idとuser1_idの両方が出力されているようです。以下のコードでこの問題を修正するにはどうすればよいですか?

$user1_id=$_SESSION['id'];
$user2_id=$data['id'];

$likesqltwo = "SELECT *
    FROM streamdata_feedback
    WHERE feedback_rating = 1
        AND feedback_userid = " . $user2_id .
        "AND feedback_streamid = " . $streamid;

$likequerytwo = mysql_query($likesqltwo);
$num3 = mysql_num_rows($likequerytwo);
if ($num3 > 0)
{
    echo "And <a title = 'See who likes " .
        $poster_name['fullusersname'] .
        "s status' href='include/likes.php?streamitem_id=" .
        $streamitem_data['streamitem_id']."' />" . 
        $num3 . " ";
}
4

1 に答える 1

1

MySQLデータベース用のクライアントはありますか?SqlYogCommunityEditionを入手することをお勧めします。次に、それに対してクエリを実行し、PHPコードの外部で返される行数を確認できます。満足のいくクエリができたら、それをPHPプロジェクトに組み込みます。

次のヒント:PHPの変数を、二重引用符で囲まれた文字列に直接含めることができます。PHPは変数を解析するので、連結する必要はありません。例えば:

$likesqltwo =
    "SELECT *
    FROM streamdata_feedback
    WHERE feedback_rating = 1
    AND feedback_userid = $user2_id
    AND feedback_streamid = $streamid;";

ただし、このコードにはまだ潜在的な欠陥があり、それがSQLインジェクション攻撃です。したがって、含める変数がユーザーからのものではないことを確認するか、リンクをたどってそのようなことを防ぐ方法について詳しく学んでください。それはあなたが助けを求めたものではありませんが、私はそれが言及する価値があると思いました。

特定の値と1の値のみfeedback_useridが等しい回数を調べるには、次のクエリを試してください。$user2_idfeedback_streamidfeedback_rating

SELECT COUNT(id)
FROM streamdata_feedback
WHERE feedback_rating = 1
AND feedback_userid = 123
AND feedback_streamid = 456;

主キーをidに置き換え、正しいユーザーIDとストリームIDをそれぞれ123と456に置き換えます。予期しない数の結果が得られた場合はCOUNT(id)、対象の列を削除して選択することをお勧めします。これにより、予想よりも多くの行が得られる理由を調べて確認できます。

于 2012-08-12T22:19:30.720 に答える