職業訓練の授業50日目~mysqlへの接続、CRUD~

f:id:nazuna_0124:20170309204724p:plain

いつぞやmysql接続にはPDOを使うと言いました。

ごめんなさい。あれは嘘でした


とりあえず動けばいいものを作るなら、mysqliのほうが使いやすかったです。


ただ問題は、どっちにしてもVBAのADO接続より使いにくい!


特にinsertなのですが、突っ込み方は2種類です。

文字列としてSQLを生成するか、プレースホルダーを使うか。


後者はセキュリティ的な意味もあるようです。


わたしがこう書けたらいいな!というのがこんなかんじ。

$db = getDb();
$rst = $db->open('TableName');

$rst->addNew;
$rst->Fields('id') = 1;
$rst->Fields('name')='なずな';
$rst->update;

ado接続したことある方にならきっと伝わるはず!


これがmysqliでぐぐってみると。

$db=getDb()
$stmt = $db->prepare("insert into TableName(id,name) value(?,?);
$stmt ->bind_param($id,$name);

$id = 1;
$name = 'nazuna';

$stmt->execute();

こんなかんじ。※動くかどうかはチェックしてません


1見すると行数おんなじだし、変わらなさそーに見えるんですが2点どーしても気に入りません。


SQL文の文字列の中にテーブル名が含まれちゃってる

これのせいでテーブル名を変数で持たせるのがめんどいです。


カラム名の記述回数が多い。ついでに変数名になってる

idと$idで合計3回書いてます。これが長いカラム名だったらカラム数自体たくさんなると

マウス投げたくなります


自分でクラス作ってなんとかするしかないんでしょーか…。


というわけで、のっけから文句を始めるタイプの皆様こんにちわ。


本日はCRUDというお話です。

データベースに接続できたなら、登録して、読めて、変更して、削除するのが基本だよね!という用語です。


これを作ると、Excelのオートフィルタの偉大さがよくわかります。


基本ではあるものの、これだけあっても驚くほど使いみちがありません。


CRUDのRの部分。Readが問題なのですよね。


そのまま読んでもほとんど意味がなくて、大抵条件付けが入ります。


直近1ヶ月のデータがみたいとか固定ならよいのですが、

ユーザーに選ばせようとすると突然難易度があがります


だけれど、これが出来ると驚きの汎用性!

オートフィルタつけたExcelデータベースっぽい表がいろいろ活躍できるのは御存知の通り!


でもでも、Excelはセルを書き換えるだけで更新できるよですって?


そんな感じで更新するのはものすごく大変で考えたくないです…。


あ でもcakePHPで焼くとそんな感じのコマンド一発で出来た気もしました。


さてさて、最近はすっかり周りを見る余裕がありません。

明日から今回の授業を活かして、twitter風の投稿システム作成が課題です。


随分劣ると思うのでr<s<t と戻っていって、awitterなんて名前にでもしようと思います。