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

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

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

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

Q&A

解決済

1回答

799閲覧

【MYSQL】【PHP】「update」で「特定のカラム」で成功しない問題の解決方法【INT】

shimane

総合スコア98

MySQL

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

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

PHP

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

0グッド

0クリップ

投稿2017/12/05 14:13

現在、プログラムの勉強をしている者です。

勉強目的でサイトの作成をして
簡単なアクセス解析を自作で作ってサイトに搭載したいと考えているのですが
「更新(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 = 登録ブログの最新記事の日時

PHP

1$outcount = "9999"; 2$sitedomain = "nifuramu64.jp"; 3$stmt = $db->prepare("update site set out = :out where sitedomain = :domain"); 4$stmt->execute([ 5 ':out' => $outcount, 6 ':domain' => $sitedomain 7]);

表示されたエラー

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

原因についてご存知の方や
何か気付いた事がありましたら
お力をお貸し頂ければとても嬉しいです。

どうかよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

投稿2017/12/05 14:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

shimane

2017/12/05 14:21

素晴らしいです! 勉強していて、あれこれ悩んだりしてました。 その悩みがすっきりと解決しました! 今後も、同じような事がありましたら 予約語についてもチェックして問題解決をしていこうと思います。 助けて頂いて本当に有難うございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問