2013-02-15 177 views
0

出於某種原因,當我通過PHP運行此查詢時,它返回8行,實際上我的數據庫中只有2行,而當我通過phpmyadmin運行它時,顯然返回2。PHP重複查詢結果?

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

echo mysql_num_rows($resultado); 

我很傷腦筋!

回答

7

您的查詢產生cartesian product因爲你沒有提供的兩個表之間的關係:bookmarksusers

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

其中COLNAME是定義表中如何相互關聯,或如何列表格應該被鏈接。

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

一點題外話,查詢與SQL Injection脆弱的,如果值(小號)變量來自外部。請看下面的文章,瞭解如何防止它。通過使用PreparedStatements你可以擺脫使用單引號圍繞值。

+0

謝謝我的朋友,主要不是因爲答案,而是你打開了一個充滿知識的新門 – 2013-02-15 05:36:37

+0

不用客氣':D' – 2013-02-15 05:38:30

3

由於JW指出的那樣,你是生產笛卡爾產品 - 你是不是對用戶加入的書籤。這就是你複製行的原因。

雖這麼說,你並不需要加入的用戶都在上面的查詢:

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

好運。