第15回 更新処理を覚えよう - MySQL講座

PHPセキュリティ

サカイ先生のMySQL講座

Lecutures on PHP

第15回 更新処理を覚えよう (その2)

 このエントリーをはてなブックマークに追加

INSERTの練習

  • レッスンの最初のほう(第8回参照)でデータの登録作業をしたよね。僕が用意してあげたファイル(phppro2data.zip)を mysql コマンドに流し込んだと思うけど、あの中身を見たことはある?
  • 見ていないと思います。あの頃はとにかく言われたことをやるだけで必死でしたから。。
  • あの中には、テーブル生成(CREATE TABLE)文に続いて、たくさんの INSERT 文が並んでいるんだ。見てみると、あまりのわかりやすさにびっくりすると思うよ。
  • そうなんですね。あとで見てみることにします。
  • じゃぁ、ここでは簡単な INSERT 文を一回、自分の手で書いてみる練習をしてみようか。顧客(customers)テーブルに太郎君を登録することにしよう。 まず最初に customers テーブルのレイアウトの確認だ。 customers テーブルはこんなレイアウトになっている。
mysql> desc customers;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| name            | varchar(64)  | YES  |     | NULL    |                |
| zip             | varchar(8)   | YES  |     | NULL    |                |
| prefecture_code | char(2)      | YES  |     | NULL    |                |
| address         | varchar(255) | YES  |     | NULL    |                |
| birthday        | date         | YES  |     | NULL    |                |
| regist_date     | datetime     | YES  |     | NULL    |                |
| unregist_date   | datetime     | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+
8 rows in set (0.02 sec)
  • そして登録したい僕の情報は、こんな感じですね。
 id              : MySQLに採番してもらう 
 name            : "ぼくは 太郎"         
 zip             : "123-4567"            
 prefecture_code : "13"                  
 address         : "東京都のどこか"      
 birthday        : 1985-11-05            
 regist_date     : 今の日時              
 unregist_date   : まだやめてない        
  • この情報で INSERT 文を作れるかな?
  • こうでしょうか。
INSERT INTO customers VALUES (NULL, "ぼくは 太郎", "123-4567", "13", "東京都のどこか", "1985-11-05", now(), null);
  • うん、いいね。 VALUE の前に 登録したいカラム名を ( ) の中にコンマで区切って書いてもいいけど、今回は全カラムのデータを指定しているから、太郎君が書いたように省略してもいいね。

ちなみにカラム名を省略しないで書く場合は、こうなる。

INSERT INTO customers (id, name, zip, prefecture_code, address, birthday, regist_date, unregist_date) VALUES (NULL, "ぼくは 太郎", "123-4567", "13", "東京都のどこか", "1985-11-05", now(), null);

このへんは参画しているプロジェクトごとに「INSERT時には必ずカラム名を記述すること」というルールを定めているところもあるので、参画しているプロジェクトのルールに従ってくれたらいいと思う。

  • では実行します。
mysql> INSERT INTO customers VALUES (NULL, "ぼくは 太郎", "123-4567", "13", "東京都のどこか", "1985-11-05", now(), null);
Query OK, 1 row affected (0.17 sec)
  • あっさり登録できましたね。確認は、、SELECT で見たらいいのかな。このテーブルは確か何万件もあったから、キーワードとして名前を指定して・・・・・
mysql> SELECT * FROM customers WHERE name ="ぼくは 太郎";
+-------+-------------+----------+-----------------+----------------+------------+---------------------+---------------+
| id    | name        | zip      | prefecture_code | address        | birthday | regist_date         | unregist_date |
+-------+-------------+----------+-----------------+----------------+------------+---------------------+---------------+
| 67621 | ぼくは 太郎 | 123-4567 | 13              | 東京都のどこか | 1985-11-05 | 2009-04-04 16:14:15 | NULL          |
+-------+-------------+----------+-----------------+----------------+------------+---------------------+---------------+
1 row in set (0.11 sec)
  • ID 67621 として登録されていますね。
  • 確認方法も含め、パーフェクトだね!

  



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)