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

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

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

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

PHP

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

Q&A

解決済

1回答

2100閲覧

PHPでのexecを使ったinsertについて

ToNishi

総合スコア5

MySQL

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

PHP

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

0グッド

0クリップ

投稿2020/03/21 08:05

PHPのexecについて、質問させてください。

現在、『よくわかるPHPの教科書PHP7対応版』を勉強していますが、
index.htmlに入れ込んだform(textarea)の内容を、
actionで指定したphpファイルでinsertすることを学んでいます。

insert自体はできたのですが、コマンドで分からない部分が一部あり、
その内容について質問したいです。

$result = $db -> exec('insert into memos set memo = "'.$_POST["memo"].'",created_at = now()');
としていますが、$_POST["memo"]を「"'.」「.'"」で囲っていますが、
どのような意味となるのでしょうか。

推測では、&_POST['memo']を文字列ではなく、変数として扱うために、
囲っていると思うのですが、
なぜ「"'.」「.'"」で囲わなければならないのか、いまいち理解できません。

ご教示いただけますと幸いです。
よろしくお願いいたします。

以下、ソースになります。
=========(index.html)=========

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="content-style-type" type="text/css"> <title>フォーム画面</title> </head> <body> <h1>フォーム画面</h1> <form name="myform" action="inputDo.php" method="post"> <textarea name="memo" cols="50" rows="10" placeholder="ここに入力する"></textarea><br> <button type="submit">登録する</button> </form> </body> </html>

=========(indexDo.php)=========

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>テスト結果</title> </head> <body> <h1>結果</h1> <?php try{ $db = new PDO('mysql:dbname=mydb;charset=utf8;host=127.0.0.1','root','root'); if ($db === false){ throw new Exception('error'); } }catch(Exception $e){ echo($e -> getMessage()); }
$result = $db -> exec('insert into memos set memo = "'.$_POST["memo"].'",created_at = now()'); echo($result);

?>

</body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

$_POST["memo"]を「"'.」「.'"」で囲っていますが、

どのような意味となるのでしょうか。

「SQL インジェクションしてください」って意味になります。

。。。ってのは置いておいて、質問に回答します。
意味としては想像しているとおりです。

推測では、&_POST['memo']を文字列ではなく、変数として扱うために、

囲っている

詳細は 文字列 を参考にしてください。

入れ子状態がよく見えてないのだと思いますが、コードをシンタックスハイライトしてみると良いくわかります。

php

1$result = $db -> exec('insert into memos set memo = "'.$_POST["memo"].'",created_at = now()');

出来上がった文字列を一度表示してみても理解しやすいかもしれません。

php

1echo 'insert into memos set memo = "'.$_POST["memo"].'",created_at = now()'; 2 3// insert into memos set memo = "HOGE",created_at = now()

投稿2020/03/21 08:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

javahack

2020/03/21 18:31

> 「SQL インジェクションしてください」って意味になります。 とても納得のいく回答でした。
ToNishi

2020/03/22 06:38

ご説明ありがとうございます。いただいた情報をもとに、以下のように理解しました。 文字列「insert into memos set memo = "」+「変数$_POST["memo"]」+文字列「,created_at = now()');」を、「.」で連結している。 PHPを学び始めて、1ヶ月ほどなので、まだまだ至らない点ばかりですが、 上記理解で問題ないでしょうか。 それと、ついでと言っては何ですが、 「詳細は 文字列(a要素でリンク) を参考にしてください。」と、ご教示いただきました。 PHPに触れる方は、各々参考書やサイトを参照していると思うのですが、 https://www.php.netは、必ず参考にされているのでしょうか。 今回の質問をさせていただいた際、参考書を掲示しましたが、 HTMLやCSSを学んだ際は、W3Cの作成したマニュアルを主に学んでいたため、 お聞きしたいです。
退会済みユーザー

退会済みユーザー

2020/03/23 21:18

> 上記理解で問題ないでしょうか。 プログラミングを学習するのに大事なのは、「どうやったら確認できるか?」とテストする方法を考えることです。 確認する方法は回答に書いてしまいましたが、自身でも考えてみてください。 > www.php.net は、必ず参考にされているのでしょうか。 はい。php の日本語の公式サイトになります。日本語圏の人であれば参考にすると思います。
ToNishi

2020/03/24 01:55

お忙しい中、ご回答ありがとうございました。 >プログラミングを学習するのに大事なのは、「どうやったら確認できるか?」とテストする方法を考えることです。 >確認する方法は回答に書いてしまいましたが、自身でも考えてみてください。 ご助言、ありがとうございます。 自分でもテストを重ねていますが、今後一層、トライエラーを行なっていきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問