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

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

ただいまの
回答率

90.35%

  • PHP

    25526questions

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

  • MySQL

    7428questions

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

UPDATE文とDELETE文

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,312

yutaishikawa_

score 52

PHPで直接、MySQLにINSERTするために、以下のテーブルを作成しました。tasksという名前の、id,title,task_date,place,memoの5つの列を作成し、tasksというテーブルを作成します。
<?php
require_once('dbconnect.php');
$stmt = $mysqli->prepare("INSERT INTO tasks (id,title,task_date,place,memo) VALUES (?,?,?,?,?)");
// 直前のクエリで使用した自動生成のIDを返す処理
$query =  "INSERT INTO tasks VALUES (NULL,'Stuttgart','DEU','Stuttagart',617000)";
$mysqli->query($query);
// $_POST['name']に名前が、$_POST['message']に本文が格納されているとする
// ? の位置に値を振り当てる。対応する変数の型はstring。
$stmt->bind_param('sssss',$_POST['id'],$_POST['title'],$_POST['task_date'],$_POST['place'],$_POST['memo']);
// 実行
$stmt->execute();
?>

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

//UPDATE文
require_once('dbconnect.php');
// 実行するためのステートメントを準備する。ユーザが作成する箇所は?にしておく。
$stmt = $mysqli->prepare('UPDATE tasks SET title = ? ,task_date = ?');
// 直前のクエリで使用した自動生成のIDを返す処理
$query =  "UPDATE tasks SET title = ? task_date = ?";
$mysqli->query($query);
// 実行
$stmt->execute();
echo '修正件数= ' . mysql_affected_rows() . '<BR>';
?>
UPDATE文は構文上、WHERE句が必要と書いてありますが、既存(MySQLに保有してある)のデータを修正するためにはどういう指定の仕方をするのか検討もつきませんでした。

//DELETE文

<?php 
require_once('dbconnect.php');
// 実行するためのステートメントを準備する。
$stmt = $mysqli->prepare("DELETE FROM tasks");
// 直前のクエリで使用した自動生成のIDを返す処理
$query =  "DELETE FROM tasks";
$mysqli->query($query);
// ? の位置に値を振り当てる。対応する変数の型はstring。
$stmt->bind_param('sssss',$_POST['id'],$_POST['title'],$_POST['task_date'],$_POST['place'],$_POST['memo']);
// 実行
$stmt->execute();
?>
DELETE文に関しては、tasksに含まれるすべてのTABLE情報を消してしまいます。
これも構文として、用いるのはWHERE句なのですかね。ひとつの列のみの削除等を考えております。

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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 11:56

    ご回答ありがとうございます。

    投稿されている例ではそのようなカラムはありますか?
    >>についてですが、ターミナルの方でkeyの設定は完了しております。
    よってINSERT文で自動的にDBが通番をつけてくれるような状態ではあります。
    という意味合いの解釈でお間違えないでしょうか?勉強不足でしたら失礼しました。

    WHERE句をつけると、id = ? という考え方なのですね。
    非常に参考になりました。ありがとうございます。
    ただ、実際に動作するような処理がかけていないので、他のphpファイルとの兼ね合いも考えてみます。(edit.phpでタスクの編集入力ページの作成、edit_do.phpでmysqlにUPDATEする処理をするファイルを分けています。)

    クラスに関しても、非常に有効的なメソッドの例をありがとうございます。メモしておきます。しかし、現段階で、この処理を一通り一手間かけて完成させた後にすっきりクラス化してみようと考えております。
    その際また多くの質問をさせていただくと思いますが、何卒お願いできればと思います。

    有難うございます。
    私も独学で、こういったサイトで、プログラマーの方が教えていただいた処理にどういったロジックがあるのかを調べ、理解することにしています。
    こういったサイトも、もっと有効的な手段として利用できればと思いました。

    キャンセル

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/14 12:02

    ご回答ありがとうございます。

    id指定に関しては、下記コメントにて詳細を記入していただいたので参考にさせていただきました。

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

    キャンセル

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    25526questions

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

  • MySQL

    7428questions

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