我正在做一本食谱书。我的数据库表如下所示:
这个想法是,用户将能够为配方插入一种配料,选择它的测量方式(体积,质量,长度......),然后,它将显示该测量的单位列表;例如,如果我插入鸡肉,并选择它作为“质量”,下次引入配料鸡时,它将显示用于测量质量的单位列表。
无论如何......此刻,我正在尝试显示一个包含食谱名称和成分列表的表格,其中包含成分名称,数量和单位名称。
如果我在mysql中执行查询
SELECT recipes_have_ingredients.recipe_id
, ingredients.name
, recipes_have_ingredients.ingredient_amount
, units.name
FROM recipes_have_ingredients
JOIN ingredients
ON recipes_have_ingredients.ingredient_id = ingredients.id
JOIN units
ON recipes_have_ingredients.unit_id = units.id
WHERE recipe_id = 2
显示:
+-----------+-------+-------------------+----------+
| recipe_id | name | ingredient_amount | name |
+-----------+-------+-------------------+----------+
| 2 | onion | 1 | kilogram |
| 2 | milk | 30 | litre |
+-----------+-------+-------------------+----------+
这就是我想要的,但是,如果我尝试创建它的功能:
public function display_ingredients_for_recipe($recipe_id = ':recipe_id') {
include 'includes/db_connection.php';
try {
$sql = "SELECT recipes_have_ingredients.recipe_id, ingredients.name, recipes_have_ingredients.ingredient_amount, units.name FROM recipes_have_ingredients JOIN ingredients ON recipes_have_ingredients.ingredient_id=ingredients.id JOIN units ON recipes_have_ingredients.unit_id=units.id WHERE recipe_id=:recipe_id";
$results = $conn->prepare($sql);
$results->bindParam(':recipe_id', $recipe_id, PDO::PARAM_INT);
$results->execute();
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage() . '<br />';
return array();
}
return $results->fetchAll(PDO::FETCH_ASSOC);
}
我尝试使用它(recipe ['id'])来自display_recipes方法:
public function display_recipes() {
include 'includes/db_connection.php';
try {
$sql = "SELECT id, name FROM recipes";
$results = $conn->prepare($sql);
$results->execute();
} catch (PDOException $e) {
echo 'Error: ' . $e->getMessage() . '<br />';
return array();
}
return $results->fetchAll(PDO::FETCH_ASSOC);
}
$ingredients = $recipeObj->display_ingredients_for_recipe($recipe['id']);
echo '<pre>';
print_r($ingredients);
echo '</pre>'; die();
显示:
Array
(
[0] => Array
(
[recipe_id] => 1
[name] => gram
[ingredient_amount] => 350
)
)
我不知道我做错了什么....为什么如果我在mysql上查询它选择我想要的东西然后,如果我尝试调试成分我不能制作成分名称和要出现的单位名称。
任何帮助将不胜感激。
答案 0 :(得分:2)
因为你有两个具有相同名称的字段(具有讽刺意味的是,恰好是&#34;名称&#34;)。 PHP在数组中不能有两个相同的键,因此它们会被覆盖。如果重命名一个(或两个)字段,它应该可以工作。
SELECT recipes_have_ingredients.recipe_id, ingredients.name AS ingredient_name, recipes_have_ingredients.ingredient_amount, units.name AS unit_name ...