2011-03-18 120 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