pagetaka

写真、PC、ネット、岡山、旅の話題をお届けします

PHP:INSERTクエリー失敗 MySQL

PHPでサイト更新状況を自動取得しようと妄想中。かなり長い妄想になっていまい、もはや「幻想」との、ヤジが聞こえてくるが…泣。

取得したデータを、MySQLに追加しようとして失敗

Apacheで動いている、PHPMySQLです。

  • ウェブサーバ=Apache/2.4.12 (Win32) OpenSSL/1.0.1l PHP/5.6.8、データベースクライアントのバージョン: libmysql - mysqlnd 5.0.11
  • phpMyAdmin=バージョン情報: 4.3.11, 最終安定バージョン: 4.4.10

phpMyAdminSQLを実行して成功。PHPに書き出してくれるリンクがあるのでクリック、それをコピペし、PHPスクリプトに載せて実行すると「INSERTクエリーが失敗しました。」とのエラー案内が表示されます。

PHPの文法エラー

「You have an error in your SQL syntax」と表示されます。「"」「'」そしてエスケープシーケンスなどのまちがいだろうと思ってイロイロ試してみたのですが、悔しいかな、繰り返し…グスン。

INSERT INTO なんとか成功

以下のソース、事前に必要なデータベース接続、データベース選択は略しているです。悪しからず。
また、「table_name」「column_name」は実際に使っているのに変更してくださいね。DBに追加したい値は「titleTEST」ということで…。

$title = "('titleTEST')";
$sql = "INSERT INTO table_name(column_name) VALUES " . $title;

1行目:「$title」は変数名で、=の右にある「"」と「"」の間にある「'titleTEST'」を代入しているです。もちろん「'」(シングルクォーテーション、アポストロフィ?)もエスケープせずそのまま…。ここが隘路でした。グスン。
2行目:sqlの追加実行。最初、変数「$title」に「'」を含めず、「($title)」とかしてましたがNG。成功してみれば何のことは無い、変数に「'」を含めて入れてしまえ~みたいなことでした。「.」は左右を結び付ける意味なので、結果的にできあがるのは「"INSERT INTO table_name(column_name) VALUES " ('titleTEST')」みたいなことになり、phpMyAdminでつくったのと齟齬が生じると爺は感じたですが、まあ、これで動く、ということで俗にいう「仕様」ということかと…シクシク。
「"」「'」「()」などに泣かされたのでありました。浅学菲才そのまま、行き当たりバッタリの爺であります…グスン。