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

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

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

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

PHP

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

Q&A

解決済

3回答

2984閲覧

UPDATE文とDELETE文

yutaishikawa_

総合スコア58

MySQL

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

PHP

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

0グッド

0クリップ

投稿2015/07/14 01:08

PHPで直接、MySQLにINSERTするために、以下のテーブルを作成しました。tasksという名前の、id,title,task_date,place,memoの5つの列を作成し、tasksというテーブルを作成します。

lang

1<?php 2require_once('dbconnect.php'); 3$stmt = $mysqli->prepare("INSERT INTO tasks (id,title,task_date,place,memo) VALUES (?,?,?,?,?)"); 4// 直前のクエリで使用した自動生成のIDを返す処理 5$query = "INSERT INTO tasks VALUES (NULL,'Stuttgart','DEU','Stuttagart',617000)"; 6$mysqli->query($query); 7// $_POST['name']に名前が、$_POST['message']に本文が格納されているとする 8// ? の位置に値を振り当てる。対応する変数の型はstring。 9$stmt->bind_param('sssss',$_POST['id'],$_POST['title'],$_POST['task_date'],$_POST['place'],$_POST['memo']); 10// 実行 11$stmt->execute(); 12?>

ここからが問題です。
INSERTすることができ、(皆様のお力添えにより)PHPからその内容を表示することもできるようになりました。
次に、その内容(1つのタスク)を編集(UPDATE文)、削除(DELETE文)を作成する際、どういった考え方があるのか教えていただけますでしょうか。
ちなみに、私はこういう風にかいてみました。

lang

1//UPDATE文 2require_once('dbconnect.php'); 3// 実行するためのステートメントを準備する。ユーザが作成する箇所は?にしておく。 4$stmt = $mysqli->prepare('UPDATE tasks SET title = ? ,task_date = ?'); 5// 直前のクエリで使用した自動生成のIDを返す処理 6$query = "UPDATE tasks SET title = ? task_date = ?"; 7$mysqli->query($query); 8// 実行 9$stmt->execute(); 10echo '修正件数= ' . mysql_affected_rows() . '<BR>'; 11?>

UPDATE文は構文上、WHERE句が必要と書いてありますが、既存(MySQLに保有してある)のデータを修正するためにはどういう指定の仕方をするのか検討もつきませんでした。

lang

1//DELETE文 2 3<?php 4require_once('dbconnect.php'); 5// 実行するためのステートメントを準備する。 6$stmt = $mysqli->prepare("DELETE FROM tasks"); 7// 直前のクエリで使用した自動生成のIDを返す処理 8$query = "DELETE FROM tasks"; 9$mysqli->query($query); 10// ? の位置に値を振り当てる。対応する変数の型はstring。 11$stmt->bind_param('sssss',$_POST['id'],$_POST['title'],$_POST['task_date'],$_POST['place'],$_POST['memo']); 12// 実行 13$stmt->execute(); 14?>

DELETE文に関しては、tasksに含まれるすべてのTABLE情報を消してしまいます。
これも構文として、用いるのはWHERE句なのですかね。ひとつの列のみの削除等を考えております。

それと、エンジニアの方々は理論がわかった上でテンプレートなどを用いることなく独自の処理でコードを書くようですが、そのためにはどういった勉強法が必要なのか具体的に教えていただければ嬉しいです。
今までHTML、CSSと学び、PHPというものに触れたときに、どういった感覚で技術を身につけていくのかが、独学ゆえ分かりません。
具体的なノウハウなどがあれば参考にさせていただきたく思います。

どうしても形にしたいことがあるので、死に物狂いで勉強しています。
いくつもの質問と同時に失礼します。
よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

ベストアンサー

まずはPHPから利用することより、
データベースをコマンドで直接操作して、頭にデータベースとは何か?
を叩き込むことが重要だったりします。

・テーブルへの挿入、修正、削除
・テーブルの削除と作成

・検索の手法と大量データの検索(インデックスの必要性の理解)

・複数のテーブルを結合して参照する手法

と段階的に、自分が欲しいデータを放り込んで、取得し、不要なら削除する。
ということを繰り返し実施してみることが大事だったりします。

がむばってくださいませ!

投稿2015/07/15 14:46

kurosawa

総合スコア780

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

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

0

UPDATE,DELETEともにWHERE句にidを指定してあげればいいのではないでしょうか。

また、技術の身に付け方ですが、私はものを作る中で、必要になったらネットで検索するなどして身に付けていきました。
ですので、正直参考にならないかと思います。ただ、すでにあるものを真似して作ることで技術を身に付けることはできるのではないでしょうか。

投稿2015/07/14 01:43

orange0190

総合スコア1698

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

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

yutaishikawa_

2015/07/14 03:02

ご回答ありがとうございます。 id指定に関しては、下記コメントにて詳細を記入していただいたので参考にさせていただきました。 現代、ワンクリック一つで書店に足を運ぶことよりも多くの情報を手に入れられる時代となりました。ですが、こういったIT分野になると知識や情報の鮮度が非常に重要で、私のような初心者の基準値ですとどういった情報を取捨選択すればよいか分からなくなってしまっていました。 技術を真似して、自らのオリジナリティを生み出すことが現代のクリエイティビティであるのか。そういった面も加味しておきながらも、こういったサイトで具体的な問題解決ができるよう利用させていただこうかと思います。今後ともご指導よろしくお願い致します。
guest

0

updateやdeleteで1件だけ処理するにはそのテーブルのユニークなカラムをキーとして処理します。
投稿されている例ではそのようなカラムはありますか?
たいていはテーブルの先頭に名前は何でもいいんですが、idみたいなカラムをつけて、それをprimary key でauto_incrementにします。
そうするとinsert文でそのidに値を入れなくても勝手にDBがユニークな通番を入れてくれます。

重複する可能性があるものをキーに削除するのは絶対避けなければいけません。
where句をつけると、
$stmt = $mysqli->prepare('UPDATE tasks SET title = ? ,task_date = ? WHERE id=?’);
$stmt->bind_param($_POST['title'],$_POST['task_date'],$_POST['id']);
$stmt->execute();
こんな感じになります。

あと、DBを操作するときは自分でそれ用のクラスを作って、たとえば上記3行を
$db->update($str, array($_POST['title'],$_POST['task_date'],$_POST['id']));
みたいな感じで簡単にかけるようなメソッドを作っておけば、将来ずっと使い回しできますよ。
いきなり難しいかもしれませんが、勉強がてらそういう便利なものもコツコツ作っておけばいいと思います。

複数行まとめてupdate, deleteするにはグループIDみたいなものをつけるとか、日付を条件にするとかいろいろなお方法があります。

自分の周りのプログラマはほとんど独学です。
独学で役に立つのは人の書いたプログラムをいっぱい読んで、どういう処理がどういう理由でなされているかを調べ、理解できたら自分で使うことです。

投稿2015/07/14 01:39

編集2015/07/14 01:52
hintrarou

総合スコア162

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

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

yutaishikawa_

2015/07/14 02:56

ご回答ありがとうございます。 投稿されている例ではそのようなカラムはありますか? >>についてですが、ターミナルの方でkeyの設定は完了しております。 よってINSERT文で自動的にDBが通番をつけてくれるような状態ではあります。 という意味合いの解釈でお間違えないでしょうか?勉強不足でしたら失礼しました。 WHERE句をつけると、id = ? という考え方なのですね。 非常に参考になりました。ありがとうございます。 ただ、実際に動作するような処理がかけていないので、他のphpファイルとの兼ね合いも考えてみます。(edit.phpでタスクの編集入力ページの作成、edit_do.phpでmysqlにUPDATEする処理をするファイルを分けています。) クラスに関しても、非常に有効的なメソッドの例をありがとうございます。メモしておきます。しかし、現段階で、この処理を一通り一手間かけて完成させた後にすっきりクラス化してみようと考えております。 その際また多くの質問をさせていただくと思いますが、何卒お願いできればと思います。 有難うございます。 私も独学で、こういったサイトで、プログラマーの方が教えていただいた処理にどういったロジックがあるのかを調べ、理解することにしています。 こういったサイトも、もっと有効的な手段として利用できればと思いました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問