【MYSQL】【PHP】「update」で「特定のカラム」で成功しない問題の解決方法【INT】
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,115
現在、プログラムの勉強をしている者です。
勉強目的でサイトの作成をして
簡単なアクセス解析を自作で作ってサイトに搭載したいと考えているのですが
「更新(update)」で問題が発生して困っています。
アクセス解析
①IN数、OUT数のクリックを取得してmysqlのデータベースに保存→出来ました。
②OUT数のクリック数をサイト毎に集計する→出来ました。
③クリック数の集計した結果を「UPDATE」でデータベースに書き込む→ここで問題が発生して出来ませんでした。
テーブル名:site
カラム名:
id,int
sitename,varchar
siteurl,varchar
siterss,varchar
sitedomain,varchar
in,int(20),デフォルト値:0
out,int(20),デフォルト値:0
henkanritu,int(20),デフォルト値:0
lastdate,datetime
sitename = 登録ブログ名
siteurl = 登録ブログのURL
siterss = 登録ブログのRSS
sitedomain = 登録ブログのクリック数をカウントする為の部分一致のURLのワード
in = IN数の集計結果をUPDATEする為のものです。
out = OUT数の集計結果をUPDATEする為のものです。
henkanritu = 登録ブログに返還できているクリック数の値をUPDATEする為のものです。(IN数とOUT数を計算)
lastdate = 登録ブログの最新記事の日時
$outcount = "9999";
$sitedomain = "nifuramu64.jp";
$stmt = $db->prepare("update site set out = :out where sitedomain = :domain");
$stmt->execute([
':out' => $outcount,
':domain' => $sitedomain
]);
表示されたエラー
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'out = '111' where sitedomain = 'nifuramu64.jp'' at line 1
日本語翻訳
致命的なエラー: 'SQLSTATE [42000]:構文エラーまたはアクセス違反:1064というメッセージで、キャッチされない例外' PDOException 'SQL構文にエラーがあります。あなたのMySQLサーバーのバージョンに対応するマニュアルをチェックしてください。正しい構文については、 'out =' 9999 'の近くで使用してください。sitedomain =' nifuramu64.jp 'は' 1行目 'です。
UPDATEするカラムを「out」ではなく「henkan」に変更した所
エラーも発生せず、正常に更新されているのを確認出来ました。
$outcount = "9999";
$sitedomain = "nifuramu64.jp";
$stmt = $db->prepare("update site set henkan = :out where sitedomain = :domain");
$stmt->execute([
':out' => $outcount,
':domain' => $sitedomain
]);
これだと「エラー」も出ずに、「henkan」カラムでの更新を確認出来ました。
また、「out」カラムだけでなく
「in」カラムに変更しても「エラー」が発生していました。
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'in = '9999' where sitedomain = 'nifuramu64.jp'' at line 1'
「in」と「out」カラムでは「UPDATE」での「エラー」が発生して
「henkan」カラムではエラーが発生せずに
「UPDATE」が成功する理由を
ネットで調べたり、自分なりに考えても解決する事が出来ませんでした。
カラム
in:int(20),NULL:いいえ,デフォルト値:0
out:int(20),NULL:いいえ,デフォルト値:0
henkan:int(20),NULL:いいえ,デフォルト値:0
原因についてご存知の方や
何か気付いた事がありましたら
お力をお貸し頂ければとても嬉しいです。
どうかよろしくお願いいたします。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+3
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.21%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2017/12/05 23:21
勉強していて、あれこれ悩んだりしてました。
その悩みがすっきりと解決しました!
今後も、同じような事がありましたら
予約語についてもチェックして問題解決をしていこうと思います。
助けて頂いて本当に有難うございました!