こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

「INSERT INTO」文はどこに書かれている構

私のパソコンにはXAMPPを構築して、MySQLが出来る環境か
定かではございません!?

 ある教本でPHPを勉強中です。
 教本の項目で
 「クリスマスパーティ予約登録」あります。
 それを実行するための、教本に書かれていたプログラム、2件のファイル名
 1)addxmas.html
 2)addxmas.php
 ですが、プログラムを以下に示しました。

 2)addxmas.phpファイルの教本に書かれていた説明に

  ◎ データベースへのアクセス:登録処理
  データベースへの接続処理が成功して、始めてデータベースにアクセスできるようになります。
 ここでのデータベースアクセスはレコードの登録処理で、(3)の「INSERT INTO」文によって行われます。
 「INSERT INTO」文は次のような構文になります。

 INSERT INTO tbl_name (col_namel, col_name2, ...)VALUES (value1, value2, ...);

 以上ですが、
  
 そこで質問ですが、
 「INSERT INTO」文の構文がどこの書かれているのか、知りたくて、
  たぶん
 xamppのフォルダ中のどこかにあると思って、100以上ファイルがあると思われる"xampp"を”INSERT INTO tbl_name”で文字列検索したところ
ヒットしませんでした!?
 
 「INSERT INTO」文はどこに書かれている構文なのでしょうか!?
 
 よろしくお願いします。
 

 
----------------------------------------------------
1)addxmas.html
-----------------------------------------------------
 
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Xmasパーティ予約</title>
<script type="text/javascript" src="../jquery-1.8.3"></script>
<script type="text/javascript">
var query = {};
$(function(){
$("#exe").clck(booking);
$("#clr").click(clearui);
});
function booking(){
query["name"] = $("#name").val();
query["org"] = $("#org").val();
query["addr"] = $("#addr").val();
query["tel"] = $("#tel").val();
query["mail"] = $("#mail").val();
query["course"] = $("input[name="course"]:checked").val();
query["nume"] = $("#nums").val();
$.post("addxmas.php",query, function(ress){$("#status").text(res);});
}
function clearui(){
$.each(["name","org",addr","tel","mail"],function(){
$("#" + this).val("");
});
$("#number").val(0);
$("#status").text("");
$("#name").focus();
}
</script>
</head>
<body bgcolor="#cadbdb">
<h3 style="color: #aa0022">Xamasパーティ予約情報登録<h/3>
<table border="4" width ="480" bgcolor="#d8d8ff">
<tr>
<th colspan="2">
Xmasパーティ予約情報登録画面&nbsp;&nbsp;
<input type="button" id="exe" value=" 登録  "/>
<input type="button" id="clr" value=" クリア "/>
</th>
</tr>
<tr><th>代表者名:</th><td><input type="text" id="name" size="16"/></td></tr>
<tr><th>所属組織:</th><td><input type="text" id="org" size="24"/></td></tr>
<tr><th>連絡住所:</th><td><input type="text" id="addr" size="50"/></td></tr>
<tr><th>電話番号:</th><td><input type="text" id="tel" size="16"/></td></tr>
<tr><th>メルアド:</th><td><input type="text" id="mail" size="40"/></td></tr>
<tr>
<th>コース選択</th>
<td id="selc">
<input type="radio" name="course" value="Aコースドリンク" />Aコース+ドリンク
&nbsp;&nbsp;<input type="radio" name="coures" value"Aコースワイン" />Aコース+
ワイン<br/>
<input type="radio" name="course" valus="Bコースリンク" />Bコース+ドリンク
&nbsp;&nbsp;<input type="radio" name="course" value="Cコースワイン"/>Cコース+ワイン
</td>
</tr>
<tr><th>参加人数:</th>
<td>
<select id="nums">
<option value="NA">選択</option>
<option value="01">01人</option>
<option value="02">02人</option>
<option value="03">03人</option>
<option value="04">04人</option>
<option value="05">05人</option>
<option value="06">06人</option>
<option value="07">07人</option>
<option value="08">08人</option>
<option value="09">09人</option>
<option value="10">10人</option>
</select>
<tr><th>処理結果:</th><td id="status">&nbsp;</td></tr>
</table>
</body>
</html>

-----------------------------------------------------
2)addxmas.php
----------------------------------------------------
<?php
//(A)開始 postメソッドでの送信データ送信
$name = $_POST["name"];
$org = $_POST["prg"];
$addr = $_POST["addr"];
$tel = $_POST["tel"];
$mail = $_POST["mail"];
$course = $_POST["course"];
$number = $_POST["number"];
//(A)終了 postメソッドでの送信データ受信
//(B) 開始 データベースの受信データ登録
$server = "localhost";
$dbname = "xmas";
$user = "root";
$passwd = "dPZ3Y8vXrP9NNb6";
$sv = mysq1_connect($server, $user, $passwd) or die("Connection err1");
$db = mysq1_select_db($dbname) or die("Connection error2");
$sq1 = "insert into xmastran valuse('$book_id','$name','$org','$addr','$tel',
'$mall','$course','$number')";------------(3)
if( mysql_query($spl,$sv)){
echo"登録成功:代表者 = ".$name;
}else{
echo"登録不成功:代表者 =".$name;
}
mysql_close($sv);
//(B)終了 データベースの受信データ
?>

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

投稿日時 - 2013-10-27 05:53:17

QNo.8322505

困ってます

質問者が選んだベストアンサー

 問題視した
  項目(3):データベースのアクセス:登録処理
$sql = "insert into xmastran values('$book_id','$name','$org','$addr','$tel',
'$mail','$course','$number')";
 
 の説明中の「INSERT INTO」文のINSERT INTO tbl_name (col_namel, col_name2, ...)VALUES (value1, value2, ...);構文
------------------------------------------------------------------------
 えっと、質問文によれば、$sql=から始まる行って、addxmas.phpに書かれている行ですよね。ちゃんと、ここだよと、(3)の注釈まで打ってありますし・・・
 で、説明文が、ここの説明であることは解っているんですよね。

 なのに、INSERT INTO文がどこにあるか解らない??????
 とすれば、多分、php以前というか・・・説明文の読み方が間違っていますとしか言いようがないのですが・・・

 えっとですね。
 INSERT INTO文は、次のように書きます。
 INSERT INTO tbl_name (col_name1, col_name2, ...)VALUES (value1, value2, ...);
 
 という書き方をした時、大文字で書いてある部分は、そのまま書く部分です。でもね、小文字で書いてあるところは、全部、その時々の状況に応じて変わる部分です。
 tbl_nameと書いてあるところには、その時、insert into文で登録する宛先のテーブル名を書きます。
 col_name?と書いてあるところには、insert into文で登録したいフィールドの名前を書きます。
 value?と書いてあるところには、insert into文で登録する値を書きます。

 今の文で、まかり間違っても、「「col_name?」なんて、どこに書いてあった?」と聞かないでくださいね。「?」の部分には1・2の数字が入ります。「馬鹿にしているのか?」と思われましたか?いえ。あなたの質問が、これと同じ勘違いをしているのが、そもそものスタートなんです。
 
 プログラムで書く、命令文は、一般的に、3つの要素からなります。
 ひとつは、キーワードです。この場合でしたら、INSERT INTOとか、VALUESがそれに当たります。これは、このまんま書くものです。
 ひとつは、変数や関数などの名前です。これは、そのプログラムで定義したもので、名前そのものはある程度自由につけることが出来ますが、一度命名したら、その名前の通り書かないといけません。
 もう一つは、リテラルといわれるものです。これは、数字や文字列を書く時に使います。3と書いて数字の3そのものを表現したいとか、"登録成功"と書いて、登録成功という文字そのものをプログラムに指定する時に使います。

 変数や関数の名前・リテラルと言ったものは、プログラムによって必ず変わります。ある命令の構文の説明をする時に、ころころ変わる物をどうやって表示するかのひとつの手段が、先の文なんです。table_nameとか、col_nameのところには、名前が入りますが、一般的には、何が入るかは解りません。解らないから、table_nameという仮の名前をつけて、これはテーブル名を書くところだよと言っているわけです。
 
 例えば、日本語で自分の名前を相手に伝える文の「構文」を説明しようとしたとしましょう。
 「私は、●●と言います。」
 この●●には、自分の名前が入るんだと言うことは解りますよね?そして、この構文を学んだ人は、「私は、●●と言います。」とは決して言いませんよね?
 それと全く同じ事です。●●だの○○だのやっていたら、ちょっと複雑な構文になると何を言っているのか解らなくなるので、英単語で名前をつけて、●●の代わりに使ってみて・・・
 「私は、nameと言います。」
 と書いてみた。それだけのことなんです。●●だと何でも入りそうですが、nameなら、あぁ、名前が入るんだなと、解るので理解しやすいですよね。
 これが、全て英単語で構成されるプログラムの文の説明の時には、それがキーワードなのか名前なのかが解らなくなるので、普通は、名前の部分が斜体で書かれています。またはキーワードの部分が太字になっているとか。

 これで、
 INSERT INTO tbl_name (col_namel, col_name2, ...)VALUES (value1, value2, ...);
 という説明が何を意味しているかわかりますか?少なくとも、プログラムにこのまま書いている「はずが無い」と言うことが解っていただけると先に進めます。

投稿日時 - 2013-10-30 23:36:01

お礼

有難うございます。
 私は無知で以下の質問したことが、恥ずかしいですが、質問した
ことで、以上御回答をいただいたことで、
 「INSERT INTO」文のINSERT INTO tbl_name (col_namel, col_name2, ...)VALUES (value1, value2, ...);ことがaddxmas.phpの(3)のことを言っていることが分かりました。教本に、分かりづらい約30行の説明が”づらづら”書かれていて、意味ががやっと分かりつつあります。
addxmas.phpのプログラムの流れの説明です。

 以下”よくぞ質問"した内容です。

説明中の「INSERT INTO」文のINSERT INTO tbl_name (col_namel, col_name2, ...)VALUES (value1, value2, ...);構文
 のプログラムが
 addxmas.php
 addxmas.html
 のプログラムを探しても無くて、
 xampp内も文字列検索でヒットしなくて!?
 何処のことを言っているのかよくわかりませんでした。

投稿日時 - 2013-11-03 08:24:27

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

 No.3です。
 「まさか」より、もっと根源的でしたか?

 あなたは、なにがしたいのですか?

 「INSERT INTO文の書き方・使い方が知りたい。」。ならば、前の回答に書いたホームページを参照してください。ちなみに、このマニュアルのトップページは、http://dev.mysql.com/doc/refman/5.1/ja/index.htmlです。ただ、実は、この回答は不親切の極みです。このマニュアルはある程度リレーショナルデータベースの知識があることを前提に書かれているからです。この前提知識は、データベース入門なんて書籍を読んで勉強してください。
 
 「INSERT INTO」文の使い方が、ヘルプで出てこないかが知りたい?というのであれば、そのような物はありません。

 「MySQLのテキスト版マニュアルくらい、ちゃんとxamppに同梱してあるべきだ」と訴えたい?入手先に、問い合わせ先のリンクがあるでしょうから、メールしてください。多分、黙殺されます。このマニュアル結構大きいんです。単なる容量の無駄遣いですから。でも、ちゃんとマニュアルは別ダウンロードできるんですよ。web版のマニュアルもちゃんとありますしね。普通は、同梱していなくても不自由しないのですが・・・

 MySQLのシステムプログラムが人に読める形式で書かれていると思っている?いえ。普通の人には読めません。時代がまだ8bitのマイコンだった頃には、バイナリを直接読める強者もいました。でも、今時のプログラム、それもDBMSのプログラムのバイナリを直接読める人間は多分いないでしょう。既に人を超えているような気がします。ついでに、バイナリが直接読める超人と仮定しても、すくなくとも、INSERT INTO・・・・・・と言う形でテキストが書いてあることは決してありません。なぜならそんな書き方をしてもコンピュータには何の役にも立たないからです。システムプログラムは構文を書いてあるものではありません。構文をいかに解析して、その解析した結果を、どのような手順で実現すれば良いかの手順が、コンピュータの世界で書いてあるものです。

 そのいずれだと仮定しても、元の質問文に、書いてあるソースコードの存在価値が解らないのですが・・・

投稿日時 - 2013-10-29 20:16:20

お礼

御回答有難うございました。
 addxmas.php
の教本の説明の項目を紹介します。
 項目(1):◎ mysql_connect
 項目のプログラム:$sv = mysql_connect($server, $user, $passwd) or die("Connection err1");

 項目(2):◎ mysql_selct_db
 項目のプログラム:$db = mysql_select_db($dbname) or die("Connection error2");

 問題視した
  項目(3):データベースのアクセス:登録処理
$sql = "insert into xmastran values('$book_id','$name','$org','$addr','$tel',
'$mail','$course','$number')";
 
 の説明中の「INSERT INTO」文のINSERT INTO tbl_name (col_namel, col_name2, ...)VALUES (value1, value2, ...);構文
 のプログラムが
 addxmas.php
 addxmas.html
 のプログラムを探しても無くて、
 xampp内も文字列検索でヒットしなくて!?
 何処のことを言っているのかよくわかりませんでした。
 なので、質問しました。
 MySQLプログラムのどこかに書かれていると分かればそれでいいです。
 ?素人+私は頭が悪いので”直ぐにピンと来ない”です。
 なので、分からないことだらけです。
 ここで言うプログラムの流れ、構造的面が素直に言ってわかりませんでした。
  深く考えないでください^^  
ただそれだけのことです。
  
  
 

投稿日時 - 2013-10-30 05:39:30

ANo.3

 質問文を読みながら・・・まさか、insert into文の使い方が書いてある構文の説明書を探してますか?
 それでしたら、mysqlのマニュアルを見るべきです。
 パソコンにも入っているような気がするのですが、手っ取り早くは、
  http://dev.mysql.com/doc/refman/5.1/ja/insert.html
 これ見てください。
 多分、最近入れたのであれば、バージョンは5だと思うのですが・・・もし違うなら、同じページの右側に、4以前のマニュアルへのリンクもありますから、そちらからどうぞ。

 でも、そもそも参考書に、insert intoの構文説明も書いてないなんて・・・それが、ほんとなら、その書籍への評価は、No2さんに激しく同意です。(セキュリティーとエラー処理に配慮したプログラムをちゃんと書くと肝心のやっていることが見えなくなるため、参考書の例題は、エラー処理無し・セキュリティーへの配慮無しという事は多いです。その場合でも、ちゃんとした本であれば、エラー処理・セキュリティーに対するお題が別にあるし、どこかに、例題をそのまま使っちゃダメよと書いてあるものですけどね。)  

投稿日時 - 2013-10-27 21:39:06

補足

 ご回答ありがとうございます。
 素人で、私にとりまして、未知である、
 PHP&MySQLは初めての分野であり、よくわかりません!?
 
INSERT INTO tbl_name (col_namel, col_name2, ...)VALUES (value1, value2, ...);
以上の構文は、MySQLのどこかに書かれているとの認識で間違いないでしょう?
 
 xamppのフォルダの文字列検索で、出てこなかった理由も疑問視
する思いですが!それはさておき、
 考え方としては間違いないでしょうか!
よろしくお願いします。

投稿日時 - 2013-10-28 15:34:29

ANo.2

いくらなんでもミスちょっと多すぎないですか・・・
これだとバグ潰しに多大な時間を取られることになります。
もうちょっと入力を丁寧に。
関数名の意味も考えながら。

$("#exe").clck(booking);

$("#exe").click(booking);

query["nume"] = $("#nums").val();

query["number"] = $("#nums").val();

<h3 style="color: #aa0022">Xamasパーティ予約情報登録<h/3>

<h3 style="color: #aa0022">Xamasパーティ予約情報登録</h3>

<input type="radio" name="course" valus="Bコースリンク" />Bコース+ドリンク

<input type="radio" name="course" valus="Bコースドリンク" />Bコース+ドリンク

$sv = mysq1_connect($server, $user, $passwd) or die("Connection err1");

$sv = mysql_connect($server, $user, $passwd) or die("Connection err1");

$db = mysq1_select_db($dbname) or die("Connection error2");

$db = mysql_select_db($dbname) or die("Connection error2");

$sq1 = "insert into xmastran valuse('$book_id','$name','$org','$addr','$tel','$mall','$course','$number')";

$sql = "insert into xmastran values('$book_id','$name','$org','$addr','$tel',
'$mall','$course','$number')";

$book_idという未定義の変数がいきなり登場していますがどこから出てきたのでしょうか?AUTO_INCREMENTされるプライマリキーならせめて

$sql = "insert into xmastran(name, org, addr, tel, mail, course, number) values('$name','$org','$addr','$tel',
'$mall','$course','$number')";

とすべきでは・・・?

なお、このコードには「SQLインジェクション攻撃」に対する深刻な脆弱性があります。ローカルのテスト環境だけならば問題ないですが、実際にサービスをWeb上で公開するのは非常に危険なので、下記リンクを参考に書き直しを検討してください。

PHPでデータベースに接続するときのまとめ
http://qiita.com/mpyw/items/b00b72c5c95aac573b71

PHP Manual - PDO
http://php.net/manual/ja/book.pdo.php

参考書に書かれていることが全て正しいと思えば大間違いです。古い参考書ほど信頼できないものはないし、このコードだと出版当時であってもセキュリティ的に脆いです。要は「ダメな参考書」です。

私なりに書くならこんな感じですかね。
http://pastebin.com/mcmL8Qri

投稿日時 - 2013-10-27 13:23:47

お礼

せっかく良い御回答をいただいていたのに、レスが遅れてすみませんでした。
ご指摘ありがとうございました。
再度見直したら、他にも、入力ミスがありました。
 プログラミングは入力ミスをしないことは基本であり、
今度からちゃんと見直す癖をつけます。
 
 この教本は以前質問した時も、教本の内容
自体に、問題視する回答を得ています。
 私としましても、教本をかえたい気持ちもあるのですが、
せっかく、なんと1年8カ月かけて60%ぐらいまで進んでので、全部やってから
次のステップ行こうと思っています。
 プログラムも日進月歩であり、パソコンほどじゃないと思いますが、
 古くなると思います。

 私の教本は一人で書かれているみたいですが、”三人寄れは何とか”ですので、
 数人で書いた合作に比べると、一人で書いた教本は、ミスを指摘できなくて
 完成度にかけるのではないでしょうか!
 
 プログラムは
行き詰まって脱落する人が多いそうです。
 実際、私は頭が悪くて、息詰まる気味ですが、やっぱり目標が
あるので、めげずに頑張っています。
 To_aru_User様みたいになれたなら本望ですが^^

投稿日時 - 2013-11-03 15:30:36

ANo.1

> $sq1 = "insert into xmastran valuse('$book_id','$name','$org','$addr','$tel',
'$mall','$course','$number')";------------(3)

ここじゃないの?ちゃんと(3)とかいてあるし。
(valuseはtypoっぽいかな?)

投稿日時 - 2013-10-27 11:13:00

お礼

有難うございました。
 今後ともよろしくお願いします。

投稿日時 - 2013-11-07 04:00:37

あなたにオススメの質問