2013-05-30 31 views
1

我得到錯誤"Integrity constraint violation: 1052 Column 'restaurant_id' in where clause is ambiguous' in"INNER JOIN:where子句太模糊

a)如何在JOIN上使用bindparam?那甚至是導致這個錯誤的問題?

function restaurant(PDO $dbh, $username) { 
    global $dbh; 
    $stmt = $dbh->prepare(" 
     SELECT  * 
     FROM   users u 
     INNER JOIN menues m 
     ON   u.user_id = m.restaurant_id 
     INNER JOIN users_slider s 
     ON   m.restaurant_id = s.restaurant_id 
     WHERE   restaurant_id = :restaurant_id 
    "); 

    $stmt->bindParam(":restaurant_id", $_GET['r']); 
    $stmt->execute(); 
    return $stmt->fetchAll(); 
} 
+0

您有意加入'resturant_id'和'user_id'因爲他們不聽起來像他們shoudl有一個關鍵的關係 – DavidB

+0

以及..他們:) –

+1

好涼,只是檢查 – DavidB

回答

10

變化

... 
WHERE  restaurant_id = :restaurant_id 

... 
WHERE  m.restaurant_id = :restaurant_id 
      ^^ 
+0

非常感謝! :) –

+0

@NabilGhulam你不止是歡迎:) – peterm

2

地方根據自己的條件表,將解決您的問題,請使用m.restaurant_ids.restaurant_id

+0

是感謝您的幫助,peterm說,它第一次:) –

1

放在哪裏等,其中m.restaurant_id =條件:restaurant_id

function restaurant(PDO $dbh, $username) { 
    global $dbh; 
    $stmt = $dbh->prepare(" 
     SELECT  * 
     FROM  users u 
     INNER JOIN menues m 
     ON   u.user_id = m.restaurant_id 
     INNER JOIN users_slider s 
     ON   m.restaurant_id = s.restaurant_id 
     WHERE  m.restaurant_id = :restaurant_id 
    "); 

    $stmt->bindParam(":restaurant_id", $_GET['r']); 
    $stmt->execute(); 
    return $stmt->fetchAll(); 
} 
+0

它真的非常好,工作 –

2

始終使用別名,以避免衝突的連接查詢。這裏restaurant_id應該是m.restaurant_id

嘗試此查詢: -

SELECT  * 
     FROM   users u 
     INNER JOIN menues m 
     ON   u.user_id = m.restaurant_id 
     INNER JOIN users_slider s 
     ON   m.restaurant_id = s.restaurant_id 
     WHERE   m.restaurant_id =:restaurant_id