Php 如何通过这种方式使用外键

Php 如何通过这种方式使用外键,php,sql,Php,Sql,我这里有点小问题。我试图在同一页面中按类别显示我的产品,并在产品之前显示。我正试图用外键来做这件事,但我认为我做错了什么,希望你能帮我。 首先,我使用以下SQL代码为类别创建表: CREATE TABLE IF NOT EXISTS `categories` ( `category_id` int(11) NOT NULL AUTO_INCREMENT, `category_name` varchar(500) NOT NULL, PRIMARY KEY (`category_id`)

我这里有点小问题。我试图在同一页面中按类别显示我的产品,并在产品之前显示。我正试图用外键来做这件事,但我认为我做错了什么,希望你能帮我。 首先,我使用以下SQL代码为类别创建表:

CREATE TABLE IF NOT EXISTS `categories` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,
  `category_name` varchar(500) NOT NULL,
  PRIMARY KEY (`category_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4;

INSERT INTO `categories` (`category_id`, `category_name`) VALUES
(1, 'Food'),
(2, 'Electronics');
现在,我创建products表:

CREATE TABLE IF NOT EXISTS `products` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT,
  `product_name` varchar(500) NOT NULL,
  `product_price` decimal(20, 2) NOT NULL,
  `category_id` int (11) NOT NULL,
  FOREIGN KEY (`category_id`) REFERENCES categories(`category_id`),
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4;

INSERT INTO `products` (`product_id`, `product_name`, `product_price`, `category_id`) VALUES
(1, 'Pizza', 10.50, 1),
(2, 'TV', 200.00, 2),
(3, 'Oven', 100.00, 2);
现在在products页面中,我尝试使用以下代码按类别检索产品:

$sql = "SELECT p.product_id, p.product_name, p.product_price, p.category_id, c.category_name FROM products p categories c WHERE c.category_id = p.category_id ORDER BY p.category_id, p.product_name";
$stmt = $connection->prepare($sql);
$stmt->execute();

$num = $stmt->rowCount();
$category = null;

if($num>0)
{
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
    {
        extract($row);
        if($category != $category_id)
        {
            if(!is_null($category)) { echo "</table>"; }

            echo "<h1>{$category_name}</h1>";
            echo "<table>";
            echo "  <tr>";
            echo "      <th>NAME</th>";
            echo "      <th>PRICE</th>";
            echo "      <th>QUANTITY</th>";
            echo "  </tr>";

            $category = $category_id;
        }
        echo "  <tr>";
        echo "      <td><div class='product-id' style='display: none'>{$product_id}</div>";
        echo "      <div class='product-name'>{$product_name}</div></td>";
        echo "      <td>&#36;{$product_price}</td>";
        echo "      <td>";
        echo "          <form class='add'>";
        echo "          <input type='number' name='quantity' value='1' min='1' max='20'/>";
        echo "          <button type='submit'>Add to cart</button>";
        echo "          </form>";
        echo "      </td>";
        echo "  </tr>";
    }
        echo "</table>";
}
else
{
    echo "No products found.<br/>";
}
问题是,总是出现错误,我得到的信息是没有找到产品。 我已经找过了,但找不到我做错了什么。我以前从未用过外键。
我感谢任何帮助,提前谢谢

你到底有什么问题?您应该在问题中清楚地说明这一点。显示的错误是什么?我不认为这是外键的问题。我刚刚注意到的一件事是您的第二个sql代码中有一个错误:您在其中有一个id_category列,可能应该命名为category_idForeign键是对表内容的约束。给定特定的表内容,外键本身不会影响查询结果。不过,看起来FROM子句的格式不正确:此处列出的两个表之间需要逗号或联接运算符。感谢大家的评论,尤其是@JohnBollinger解决了此问题!我已经用逗号了,现在效果很好,所有产品都是按类别显示的!谢谢你,伙计!