0

何らかの理由で、このクエリを PHP で実行すると 8 行が返されますが、実際にはデータベースに 2 行しかなく、phpmyadmin で実行すると明らかに 2 が返されます。

 $sql = "SELECT url FROM bookmarks,users WHERE bookmarks.user_id = {$session->user_id}";
 $resultado = $db->query($sql);

 echo mysql_num_rows($resultado);

私は私の頭を壊している !

4

2 に答える 2

7

cartesian product2 つのテーブル間の関係を指定していないため、クエリが生成されます:bookmarksusers,

SELECT url 
FROM   bookmarks 
       INNER JOIN users 
          ON bookmarks.COLNAME = users.COLNAME
WHERE  bookmarks.user_id = '$session->user_id'

whereCOLNAMEは、テーブルが互いにどのように関連付けられるか、またはテーブルがどのようにリンクされるかを定義する列です。

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

補足として、変数のSQL Injection値が外部から取得された場合、クエリは脆弱です。予防方法については、以下の記事をご覧ください。を使用すると、値を一重引用符で囲む必要がなくなります。PreparedStatements

于 2013-02-15T05:32:53.240 に答える
3

JWが指摘したように、あなたはデカルト積を作成しています。つまり、ユーザーに対してブックマークに参加しているのではありません。これが、行を複製している理由です。

そうは言っても、上記のクエリでユーザーに参加する必要はまったくありません。

"SELECT url FROM bookmarks WHERE bookmarks.user_id = {$session->user_id}"

幸運を。

于 2013-02-15T05:37:55.013 に答える