2017-05-28 130 views
0

私は現在、フォーミュラで材料をチェックしたレシピを表示するプロジェットに取り組んでいます。私は終わり近くにいるが、私は本当に私のエラーが何かを理解していない。誰かが私に説明することができた場合:致命的なエラー:キャッチされていないPDOException:SQLSTATE [42S22]:列が見つかりません

Fatal error: Uncaught PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column '$idingredient' in 'where clause' in /homepages/30/d675437312/htdocs/assets/recettemalin/recetteselectionnee.php:55 Stack trace: #0 /homepages/30/d675437312/htdocs/assets/recettemalin/recetteselectionnee.php(55): PDO->query(' SELECT DIST...') #1 {main} thrown in /homepages/30/d675437312/htdocs/assets/recettemalin/recetteselectionnee.php on line 55

は、ここではブロック私のコードです:私は$idingredient

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']; 
    } 
} 

エコー私はこのような成分のIDのリストを取得:6,9,11,12 、1,5しかし、それはどこで、なぜ私は不思議に思っている節で好きではないようだ?

答えて

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 . '...'; 
0

これは長すぎますコメント

まず、クエリをパラメータ化します。構文エラーを引き起こす可能性があるため、ランダムな文字列をクエリにダンプしないでください。

第2に、特定の問題は文字列を入力していることですが、文字列区切り文字はありません。したがって、この値は識別子、具体的には列エイリアスとして解釈されます。私はこのソリューションをお勧めしませんが、WHERE i.id_1 IN ('$idingredient')はおそらくあなたが望むことをします。

第3に、単一の値との比較にINを使用しないでください。それは間違いです。さらに、コンマを持っていても値は単一の値です。 。 。 'butter,margarine'は、1つの値で、2つの値ではなくカンマで区切られています。

+0

'( '。$ idingredient。')' – hassan

関連する問題