提问者:小点点

致命错误:未捕获的PDOException:SQLState[42S22]:找不到列


我目前在一个项目上工作,它显示一个配方,配料在一个公式中检查。我快到最后了,但我真的不明白我的错误是什么。如果有人能向我解释:

致命错误:未捕获的PDOException:SQLState[42S22]:找不到列:1054/homepages/30/d675437312/htdocs/assets/recettemalin/recettemalin/recettemelectionnee.php:55堆栈跟踪:#0/homepages/30/d675437312/htdocs/assets/recettemalin/recettemelectionnee.php(55):pdo->查询(“SELECT Dist...”)中的“where clause”中的未知列“$IDIngredit”#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,但它似乎不被where子句喜欢,我想知道为什么?


共1个答案

匿名用户

这对于一个评论来说太长了。

首先,参数化查询。不要只是将随机字符串转储到查询中,因为这会导致语法错误。

第二,您的具体问题是,您正在放入一个字符串,但没有字符串分隔符。因此,该值被解释为标识符--特别是列别名。我不推荐这种解决方案,但where I.id_1 IN('$IDIngreatent')很可能符合您的要求。

第三,不要使用in与单个值进行比较。这是误导。此外,该值是单个值,即使它有逗号。.“butter,margarine”是一个值,其中有逗号,而不是两个值。