从三个表中选择SQL和PHP

时间:2015-12-28 16:35:08

标签: php mysql

当我选择一个类别时,它会显示一个新错误。我只需要回复所选类别的蛋糕名称和价格,如果可能的话,我想添加另一个有品味的下拉按钮。例如,如果有人正在寻找生日蛋糕将香草味道所有生日蛋糕与香草口味将显示与他们的价格。



method3




2 个答案:

答案 0 :(得分:2)

以下是使用PDO

的方法
$stmt = $pdo->prepare("SELECT * FROM cupcakes 
                       WHERE id_category = :category AND id_flavor = :flavor");
$stmt->bindParam(':category', $_POST['category']);
$stmt->bindParam(':flavor', $_POST['flavor']);
$stmt->execute();

查询不需要关联3个表。它只是从表单输入中获取类别ID和flavor ID,并使用它们从第一个表中选择适当的行。

您只使用其他两个表来填充类别和风味下拉列表。

以下是使用过时的mysql扩展而不是PDO执行上述查询的方法:

// Protect against SQL injection
$cat = mysql_real_escape_string($_POST['category']);
$flavor = mysql_real_escape_string($_POST['flavor']);

// Build and run query
$sql = "SELECT * FROM cupcakes
        WHERE id_category = {$cat}
        AND id_flavor = {$flavor}";
$result = mysql_query($sql);

答案 1 :(得分:0)

我注意到在另一个答案中你说你还有错误。通常会说您收到的错误 - 请通过editing it将其添加到您的问题中。

与此同时,我可以在此SQL查询中立即看到一个问题:

SELECT * FROM cupcakes, cupcake category, cupcake flavor WHERE
  cupcakes.cupcake_id = cupcake category.id_category AND
  cupcake category.id_category = cupcake flavor.id_flavor AND
  cupcake category.cupcake_id = cupcake flavor.cupcake_id

看起来您有两个表(cupcake categorycupcake flavor),其中包含空格。这会导致查询解析器出现歧义:你是指一个表然后是另一个关键字,还是指一个带有空格的表名?因此引擎输出错误,因为它不知道如何继续。

你仍然可以使用空格,但由于这个问题,这样做通常被认为不是一种好的做法,理想情况下,空间将被替换为下划线。但是,如果必须使用空格,则需要使用反引号分隔名称:

SELECT * FROM cupcakes, `cupcake category` category, `cupcake flavor` flavor WHERE
  cupcakes.cupcake_id = category.id_category AND
  category.id_category = flavor.id_flavor AND
  category.cupcake_id = flavor.cupcake_id

我使用categoryflavor的表别名,而不是分隔所有这些,我认为这样可以更容易阅读。

如果这不起作用,请说明它不起作用的方式,以及您获得的错误消息(如果有)。