我目前正在制作一个项目,其中显示了一个配方,其中包含以公式形式检查的成分。我接近结束但我真的不明白我的错误是什么。如果有人可以向我解释:
致命错误:未捕获PDOException:SQLSTATE [42S22]:找不到列: 1054未知专栏' $ idingredient'在' where子句'在 /homepages/30/d675437312/htdocs/assets/recettemalin/recetteselectionnee.php:55 堆栈跟踪:#0 /homepages/30/d675437312/htdocs/assets/recettemalin/recetteselectionnee.php(55): PDO->查询(' SELECT DIST ...')#1 {main}引入 /homepages/30/d675437312/htdocs/assets/recettemalin/recetteselectionnee.php 在第55行
这是我阻止的代码:
if (isset($_POST['ingredients'])) {
$idingredient = implode(",", $_POST['ingredients']);
echo $idingredient.'<br>';
$recette = $bdd->query(' SELECT DISTINCT r.*
FROM ingredient i
INNER JOIN contient c
ON i.id_i = c.id_i
INNER JOIN recette r
ON c.id_r = r.id_r
WHERE i.id_i IN ($idingredient)');
while ($donnees = $recette->fetch()) {
echo $donnees['nom_r'];
echo $donnees['type_r'];
echo $donnees['description'];
}
}
当我回复$idingredient
时,我得到一份这样的成分ID列表:6,9,11,12,1,5但似乎不喜欢这个和我的条款#39;我想知道为什么?
答案 0 :(得分:0)
您应该在查询字符串中使用“而不是”来评估变量:
$recette = $bdd->query(" SELECT DISTINCT r.*
FROM ingredient i
INNER JOIN contient c
ON i.id_i = c.id_i
INNER JOIN recette r
ON c.id_r = r.id_r
WHERE i.id_i IN ($idingredient)");
或者你可以将变量concatinate到字符串:
'.....' . $idingredient . '...';
答案 1 :(得分:0)
评论太长了。
首先,参数化您的查询。不要将随机字符串转储到查询中,因为它可能导致语法错误。
其次,你的具体问题是你输入一个字符串,但是没有字符串分隔符。因此,该值被解释为标识符 - 特别是列别名。我不推荐这个解决方案,但WHERE i.id_1 IN ('$idingredient')
可能会做你想要的。
第三,不要使用IN
来比较单个值。这是误导。此外,该值是单个值,即使它有逗号。 。 。 'butter,margarine'
是一个带逗号的值,而不是两个值。