web-dev-qa-db-ja.com

SQLSTATE [42S22]:列が見つかりません:1054不明な列

PDOを使用してMySQLにレコードを挿入しようとしています。私のsqlステートメントは次のコードで確認できます。

<?php
    try{
        //include file myfunctions.php allows us to calls functions from it
        include ("myfunctions.php");
        //Assign function getConnection() from myfunctions.php to variable $db
        $db = getConnection();


        foreach($_POST['chk'] as $check_value)
        {
            $check = $check_value;
            $fav = "channel/item [title = \"$check\"]";
            $holidayDoc = simplexml_load_file('holidays.xml');
            $favourites = $holidayDoc->xpath($fav);

        foreach($favourites as $currentFav)
        {
            echo "{$currentFav->link}". "<br \>";
            echo "{$currentFav->title}". "<br \>";
            echo "{$currentFav->description}". "<br \>";
            echo "{$currentFav->pubDate} ". "<br \>";

            $sql = "INSERT INTO `saved_holidays` (`subscriberID`, `link`, `pubDate`, `title`, `description`) 
            VALUES (`John`, `$currentFav->link`, `$currentFav->pubDate`, `$currentFav->title`, `$currentFav->description`)";

            $db->exec($sql);
            $db = null;
        }
    }
}
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
?>

このコードを実行すると、次のエラーメッセージが表示されます。

SQLSTATE [42S22]:列が見つかりません:1054不明な列 'ジョン'が 'フィールドリスト'にあります

これは間違いなくこの問題の簡単な解決策ですが、私はそれを見ることができないようです、誰かが私を正しい方向に向けることができますか?

8
Darren Burgess

これは、価値観にバックティックを使用しているためだと思います。それらを一重引用符に変更してください。

$sql = "INSERT INTO `saved_holidays` (`subscriberID`, `link`, `pubDate`, `title`, `description`) 
            VALUES ('John', '$currentFav->link', '$currentFav->pubDate', '$currentFav->title', '$currentFav->description')";

詳細については、 これにSO単一引用符とバッククォートに関する質問 を参照してください

19
Justin Pihony
 $sql = "INSERT INTO `saved_holidays` (`subscriberID`, `link`, `pubDate`, `title`, `description`) 
            VALUES ('John', '$currentFav->link', '$currentFav->pubDate', '$currentFav->title', '$currentFav->description')";

フィールドのみに `を使用し、値に 'を使用します

3
sujal

`はフィールドを指定するためのものであり、一重引用符を使用する必要があります'は値です。

$sql = "INSERT INTO `saved_holidays` (`subscriberID`, `link`, `pubDate`, `title`, `description`) 
        VALUES ('John', '$currentFav->link', '$currentFav->pubDate', '$currentFav->title', '$currentFav->description')";
3
Pierre-Olivier

これに苦労している他の人にとって、これが私がこのエラーメッセージを見た理由と私がそれを解決した方法です:

  1. 私は共有コードベースに取り組んでいました(非常に多くの貢献者が働いています)
  2. コードに取り組んでいる他の誰かが、あなたが知らないうちに列を追加しました。
  3. コードをプルしましたが、昨日はすべて機能していましたが、今日はエラーメッセージが表示されました: "SQLSTATE [42S22]:Column not found:1054 Unknown column 'column_name' in'field list '"

あなたがしなければならないのはあなたのテーブルに行って列を追加することだけです(私にとってこれは私がこれをしたのはphpmyadminでした)。

受け取ったエラーメッセージから、追加の列pricing_formulaが必要なのは「プロパティ」テーブルであると推測できました。この列をDBに直接挿入するだけです。

参考までに、これは私のエラーメッセージでした:

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'pricing_formula' in 
'field list' (SQL: select `site`.`name`, `domain`, `site`.`uuid`, 
`pricing_formula`, `client`.`uuid` as `clientRef` from `site` inner join 
`client` on `site`.`client_id` = `client`.`id` where `client_id` = 1 and 
`site`.`deleted_at` is null)"

これが誰かを助けることを願っています。誰かがまだこの問題を修正する方法を完全に知らないが、私の説明が彼らの問題を説明していると思うなら、連絡してください-私はあなたがそれを修正するのを手伝うように努めます。

また、参考として、これはLaravelバックエンドプロジェクトであり、Angularフロントエンドです。

1
Lilly_Code

これでモデルを更新します:

public $timestamps = false;

これは、Eloquent関数がタイムスタンプであるクエリに「updatedat」プロパティを追加し、これがこのエラーをスローするために発生しました。

0
Mohammed_7aafar