2011-03-18 180 views
0

我有三個表稱爲product,product_category和category,其中product_category是連接表。PHP SQL - 連接三個表

如何在PHP中使用SQL連接這些表?

鏈接表只有productID鏈接到產品表和鏈接到該類別的catID。

回答

4

這樣的事情?

SELECT 
    * 
FROM 
    product 
INNER JOIN 
    product_category 
    ON product_category.productID = product.productID 
INNER JOIN 
    category 
    ON category.catID = product_category.catID 
+0

好吧,但我怎麼能採取的產品和類別使用來自PHP變量。 – Chris 2011-03-18 17:38:17

+0

首先,您需要查看如何使用PHP編寫預處理語句。這些可以讓您以安全的方式爲您的SQL代碼提供參數(不會被濫用)(查找SQL注入攻擊)。然後你需要添加一個WHERE子句,比如:* WHERE product.productID =:productID * – MatBailie 2011-03-18 17:41:53

+0

http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php – MatBailie 2011-03-18 17:42:57

2

您的查詢應該是這個樣子: 增加的需求,應該有一個productId參數和的categoryId從變量:

$query = "SELECT * FROM 
      product p 
      JOIN product_category pc ON p.id = pc.productId 
      JOIN category c ON c.id = pc. categoryId 
      WHERE p.id = {$productId} 
      AND c.id = {$categoryId}"; 
+0

添加了有關PHP變量的要求@Dems作爲其他答案發表評論 – Nanne 2011-03-18 17:41:39

+0

這是一個打開SQL注入攻擊的示例。請在使用此方法之前閱讀有關內容。我強烈建議您,如果任何參數都是由用戶提供的,請不要以此方式直接構建用於執行的SQL查詢。 – MatBailie 2011-03-18 17:45:30

+0

這就是這樣一個小的blurb,請不要像這樣添加kneejerk反應。如果你事先檢查你的數值是否爲數字(爲什麼你會想要在查詢中這麼做?)或者做一些其他形式的清理,那麼你不會對SQL注入攻擊開放。 – Nanne 2011-03-18 19:03:32