質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1963閲覧

【PHP】【MYSQL】'SQLSTATE[42S22]: Column not found: 1054の解決方法【Unknown column】

shimane

総合スコア98

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/08/24 14:44

現在PHP/MYSQLの勉強をしている者です。

今回、記事・URL・更新日時といった情報をmysqlを使ってデータベースに保存して
phpを使って表示するというサイトを作りながら勉強をしています。

【実行してみた事】

記事タイトル・記事URL・更新日時・コメント数を取得して
PHPでMYSQLを使ってデータベースに登録。

PHPにてMYSQLに入っているデータを取り出して表示。

ここまではネットで調べたり、書籍で調べたりでなんとか実現する事が出来ました。

そこで1歩前に進んで

データを登録する際に、
既に登録している記事タイトルやURLだった場合に
「重複してデータベースに登録を防ぐ為」に

「コメント数」・「更新時間(何分前・何時間前・何か月前などの)」だけを最新の情報に更新するという風に
設定してみました。

PHP

1//ON DUPLICATE KEY UPDATEに jikan = $jikan, を設定するとエラーが表示されます。 2//jikan = $jikan,以外の「comment = $comment,」と 3//「created = now()」だけではエラーが表示されず成功します。 4 5//$jikanには「2分前」「1時間前」といった文字列が入っています。 6//$commentには「10」「100」といった数値が入っています。 7 8$sql = "insert into bbs (title, url, body, name, comment, jikan, 9created) values (:title,:url,:body,:name,:comment,:jikan,now()) 10ON DUPLICATE KEY UPDATE 11comment = $comment, 12jikan = $jikan, 13created = now() 14"; 15$stmt = $db->prepare($sql); 16$stmt->execute([ 17 ':title' => $title, 18 ':url' => $url, 19 ':body' => $body, 20 ':name' => $name, 21 ':comment' => $comment, 22 ':jikan ' => $jikan 23]); 24 25

ON DUPLICATE KEY UPDATE
にて
jikan = $jikan,を設定した時に下記のエラーコードが表示されました。

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column '2分前' in 'field list'' in

日本語訳:
SQLSTATE [42S22]:列が見つかりません:1054'フィールドリスト 'の' 2分前 'の不明な列' '

テーブルにあるカラムには
title, url, body, name, comment, jikan,created があります。

プライマリーキー:id
ユニークキー:title
ユニークキー:url
に設定しています。

エラーが表示されない変数には「日本語」が入っていなく「数値」や「日付」
エラーが表示される変数「$jikan」には「2分前」「5分前」といった日本語が入っているので
それが原因なのかも?と考え
色々と試してみたのですが上手くいかず、頭が混乱してしまっている状態です。

ネットで色々調べてみたのですが、解決する事が出来ませんでした。
解決方法をご存知の方や、何かお気付きの点がある方は
お力をお貸し頂けると嬉しいです。
どうかお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ON DUPLICATE KEY UPDATE
でデータを再利用するときはvaluescが使えるかもしれません

insert into bbs (title, url, body, name, comment, jikan,
created) values (:title,:url,:body,:name,:comment,:jikan,now())
ON DUPLICATE KEY UPDATE
comment = values(comment),
jikan = values(jikan),
created = now()

投稿2017/08/25 00:19

yambejp

総合スコア114581

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shimane

2017/08/25 03:11

教えて頂いて有難うございます! 「valuesc」についてはネットで調べても まったく記載がなかったので勉強になりました。とても分かりやすい記述で、初心者の私にも使えそうです、大感謝です!
guest

0

ベストアンサー

PHP

1$sql = "insert into bbs (title, url, body, name, comment, jikan, 2created) values (:title,:url,:body,:name,:comment,:jikan,now()) 3ON DUPLICATE KEY UPDATE 4comment = '$comment', 5jikan = '$jikan', 6created = now() 7";

って言う感じでシングルコーテーション囲んでないからではと思います。

※プリペアドステートメント使ってるから

PHP

1$sql = "insert into bbs (title, url, body, name, comment, jikan, 2created) values (:title,:url,:body,:name,:comment,:jikan,now()) 3ON DUPLICATE KEY UPDATE 4comment = :comment, 5jikan = :jikan, 6created = now() 7";

のほうがいいかもしれませんね

投稿2017/08/24 15:51

rururu3

総合スコア5545

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shimane

2017/08/25 03:09

助けて頂いて有難うございます!ああでもない、こうでもないと頭の中がごっちゃごちゃになってしまってたので本当に助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問