FuelPHP + MySQL で PHP Webアプリケーションを作ってみる ― データベース構築
ここでは、こんな感じのエンティティ構成でデータベースを構築してみます。
ちなみに「A5:SQL Mk-2」というツールを使っています。
A5:SQL Mk-2 - フリーの汎用SQL開発ツール/ER図ツール
データベース作成
文字コード「UTF-8」を指定して「USER_MANAGEMENT」というデータベースを作成します。
$ mysql -u root mysql> CREATE DATABASE `USER_MANAGEMENT` DEFAULT CHARACTER SET UTF8; Query OK, 1 row affected (0.02 sec)
無事作成されたか確認。
mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | cdcol | | mysql | | performance_schema | | phpmyadmin | | test | | user_management | | webauth | +--------------------+ 8 rows in set (0.03 sec) mysql> SHOW CREATE DATABASE USER_MANAGEMENT; +-----------------+------------------------------------------------------------- -------------+ | Database | Create Database | +-----------------+------------------------------------------------------------- -------------+ | USER_MANAGEMENT | CREATE DATABASE `USER_MANAGEMENT` /*!40100 DEFAULT CHARACTER SET utf8 */ | +-----------------+------------------------------------------------------------- -------------+ 1 row in set (0.00 sec)
テーブル作成
先ほどのER図からDDLを作成し、テーブルを作ってみます。
mysql> USE USER_MANAGEMENT; Database changed mysql> create table DEPT_MST ( -> DEPT_CD INT not null auto_increment comment '所属CD' -> , DEPT_NAME VARCHAR(50) not null comment '所属名' -> , constraint DEPT_MST_PKC primary key (DEPT_CD) -> ) comment '所属マスタ' ; Query OK, 0 rows affected (0.06 sec) mysql> create table USER_MST ( -> USER_CD CHAR(5) not null comment '社員CD' -> , DEPT_CD INT not null comment '所属CD' -> , USER_NAME VARCHAR(50) not null comment '社員名' -> , ENTER_DATE DATE not null comment '入社年月日' -> , constraint USER_MST_PKC primary key (USER_CD) -> ) comment '社員マスタ' ; Query OK, 0 rows affected (0.02 sec) mysql> SHOW TABLES; +---------------------------+ | Tables_in_user_management | +---------------------------+ | dept_mst | | user_mst | +---------------------------+ 2 rows in set (0.00 sec)
テストデータ投入
せっかくテーブルを作ったので、作成した社員マスタ、所属マスタにデータを入れてみます。
mysql> INSERT INTO DEPT_MST(DEPT_NAME) VALUES('総務部'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO DEPT_MST(DEPT_NAME) VALUES('経理部'); Query OK, 1 row affected (0.00 sec) mysql> mysql> INSERT INTO USER_MST(USER_CD, DEPT_CD, USER_NAME, ENTER_DATE) -> VALUES('00001', 1, '総務 太郎', '2005-04-01'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO USER_MST(USER_CD, DEPT_CD, USER_NAME, ENTER_DATE) -> VALUES('00002', 1, '総務 次郎', '2010-10-01'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO USER_MST(USER_CD, DEPT_CD, USER_NAME, ENTER_DATE) -> VALUES('00003', 2, '経理 雄太', '2008-04-01'); Query OK, 1 row affected (0.00 sec) mysql> SELECT USER_CD, DEPT_NAME, USER_NAME, ENTER_DATE FROM USER_MST -> INNER JOIN DEPT_MST ON USER_MST.DEPT_CD = DEPT_MST.DEPT_CD; +---------+-----------+------------+------------+ | USER_CD | DEPT_NAME | USER_NAME | ENTER_DATE | +---------+-----------+------------+------------+ | 00001 | 総務部 | 総務 太郎 | 2005-04-01 | | 00002 | 総務部 | 総務 次郎 | 2010-10-01 | | 00003 | 経理部 | 経理 雄太 | 2008-04-01 | +---------+-----------+------------+------------+ 3 rows in set (0.00 sec)
これでデータベースの構築とテーブル作成が完了です。
FuelPHP + MySQL で PHP Webアプリケーションを作ってみる ― ローカル環境構築編
PHPの勉強も兼ねて、PHP開発環境を構築してFuelPHPでデータベースを使った簡単なWebアプリケーションを作ってみます。
環境
今回構築しようとしている環境はこんな感じ↓
PHP環境の構築
XAMPPのインストール
ここでは、XAMPPを使って簡単にPHP開発環境を整えます。
XAMPP プロジェクト日本語トップページ - SourceForge.JP
ページ内にある[ダウンロード]から、Windows版インストーラーをダウンロードします。
ダウンロードできたらインストーラーを実行。使わなそうなコンポーネントは除外。
適当なフォルダを指定してをインストール開始。ここでは「C:\xampp」にインストールしました。
XAMPPの起動
XAMPPのインストールが終わったら、さっそく起動してみます。
[XAMPP Control Panel]がインストールされているので、それを起動します。
[Apache]の[Start]ボタンを押してみます。
無事に起動できたら、ブラウザで「http://localhost/xampp/」にアクセスしてみます。
「XAMPP Windows版へようこそ!」みたいな画面が表示されればOK。
MySQL
確認
$ mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.6.16 MySQL Community Server (GPL) Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
ちなみにmysqlコマンドから抜けるには「\q」をタイプします。
mysql> \q Bye
NetBeans
NetBeansのインストール
下記サイトからNetBeansのインストーラーをダウンロードします。今回開発するのはPHPなので、PHPのものを選択するか、全部入りのものを選択してください。
https://netbeans.org/downloads/?pagelang=ja
ダウンロードが完了したらインストーラーを実行します。インストーラー実行時にJava環境がなくて継続できない場合は、ここからJava実行環境をインストールします。
http://java.com/ja/download/
NetBeansの起動確認
インストールが終わったら、NetBeansを起動してみます。
[ツール > オプション > PHP]でPHPへのパスが未設定の場合は、先ほど環境変数に設定したPHPへのパスを設定してください。
FuelPHPのプラグインをインストール
[ツール > プラグイン > 使用可能なプラグイン]から[PHP FuelPHP Framework]をインストールします。(右上にある[検索]に「FuelPHP」を入れるとすぐ見つかります)
[ツール > オプション > PHP > フレームワークおよびツール]に[FuelPHP]があることを確認します。
Composerのインストール、設定
FuelPHPではComposerが必須らしいので、ここからWindows用インストーラー(Composer-Setup.exe)をダウンロードします。
https://getcomposer.org/download/
ダウンロードしたら、インストーラーを実行してComposerをインストールします。
インストールが完了したら、NetBeansの[ツール > オプション > PHP > コンポーザー]でパスを設定します。
ここでは、「C:\ProgramData\ComposerSetup\bin\composer.phar」にインストールされていました。
Git for Windows
Composerではgitを使うので、Git for Windows(msysgit)をインストールします。
ここでは「Git-1.9.0-preview20140217.exe」をダウンロードしました。
http://msysgit.github.io/
環境変数にgitへのパスを追加します。
ここでは「C:\Program Files (x86)\Git\bin」を追加しました。
$ git --version git version 1.9.0.msysgit.0
PHP文字列の基本
PHPの文字列について、基本的なことを記載。
PHP: 文字列 - Manual
引用符による違い
引用符
シングルクォーテーションによる文字列定義では、エスケープや変数展開がされない。
バックスラッシュ、シングルクォーテーション自体のエスケープ程度。
$myName = 'Taro'; echo 'My name is $myName.'; // 出力:My name is $myName.
二重引用符
ダブルクォーテーションによる文字列定義では、エスケープや変数展開が行われる。
$myName = 'Taro'; echo "My name is $myName."; // 出力:My name is Taro.
Nowdocとヒアドキュメント
引用符で囲まずに文字列を定義する方法。
Nowdoc
シングルクォーテーションと同様に、エスケープや変数展開がされない。
$nowDoc = <<<'EOD' Hi! I am $myName!! Nice to meet you!!! EOD; echo $nowDoc; // Hi! I am $myName!! // Nice to meet you!!!
ヒアドキュメント
ダブルクォーテーションと同様に、エスケープや変数展開が行われる。
$hearDoc = <<<EOH Hi! I am $myName!! Nice to meet you!!! EOH; echo $hearDoc; // Hi! I am Taro!! // Nice to meet you!!!
複雑な (波括弧) 構文
「{~}」を使って複雑な式を文字列定義の中に含めることができる。
$ary = array('key1'=>'val1', 'key2'=>'val2'); echo "value of key1 is {$ary['key1']}."; // value of key1 is val1.
三菱東京UFJ銀行のフィッシング詐欺メールが来た
三菱東京UFJ銀行を語る怪しげなフィッシング詐欺と思われるメールが届いたので晒してみます。
以下、突っ込みどころ。
- 「こんにちは!」とか金融機関のセキュリティ確認メールにしては口調が軽すぎない?
- 「あなたの~」が3回続くなど、日本語の文章としては不自然。
- HTMLメールだったのでリンク先URLは一見それっぽく見えるが、実際には全然違うURLに飛ばそうとしている。
- 「貴様」ってお前は何様のつもりかとw
ちなみに、リンク先のURLにはパラメータとして受信したメールアドレスが付与されていたので、どのメールアドレスから来たのかが分かるような仕組みになっている。
念のため「フィッシング対策協議会」というところに通報しておきました。
フィッシング対策協議会 Council of Anti-Phishing Japan
間違ってリンク先をクリックして、インターネットバンキングの情報を入れてしまう人もいるんだろうな…
被害にあう方が一人でも少なくなることを祈ります。
PHPで文字列比較
PHPで文字列比較を行う際、注意しないとハマることになりそうな点のメモ。
結論から
文字列比較を厳密に行いたい場合は、何はともあれ「===」を使用すること!
(もしくはstrcmp())
検証
大文字と小文字の区別
これはイメージ通り。== も === も変わらず、きちんと区別してくれる。
逆に、区別したくない場合は大文字/小文字のどちらかに変換してから比較するか、 strcasecmp() を使う。
式 | 結果 |
---|---|
"aaa" == "aaa" | true |
"aaa" === "aaa" | true |
strcmp("aaa", "aaa") | 0 |
"aaa" == "AAA" | false |
"aaa" === "AAA" | false |
strcmp("aaa", "AAA") | 1 |
strcasecmp("aaa", "AAA") | 0 |
数値と文字列の確認
これは注意が必要。== だと数値と文字列の比較で「うまいこと」解釈してくれるおかげで、「"1.0"と1が等しい」と判定される。
式 | 結果 |
---|---|
"1" == 1 | true |
"1" === 1 | false |
strcmp("1", 1) | 0 |
"1.0" == 1 | true |
"1.0" === 1 | false |
strcmp("1.0", 1) | 2 |
数字文字列と数字文字列の確認
これにも注意が必要。== は柔軟なのでなんと「"1"と"1.0"が等しい」と判定される。
式 | 結果 |
---|---|
"1" == "1" | true |
"1" === "1" | true |
strcmp("1", "1") | 0 |
"1.0" == "1" | true |
"1.0" === "1" | false |
strcmp("1.0", "1") | 2 |
検証したソースコード
今回検証したソースコードはこんな感じ↓
echo '■大文字/小文字区別の確認 ―――――'; echo '"aaa" == "aaa": '.(("aaa" == "aaa") ? 'true' : 'false'); echo '"aaa" === "aaa": '.(("aaa" == "aaa") ? 'true' : 'false'); echo 'strcmp("aaa", "aaa"): '.strcmp("aaa", "aaa"); echo '"aaa" == "AAA": '.(("aaa" == "AAA") ? 'true' : 'false'); echo '"aaa" === "AAA": '.(("aaa" === "AAA") ? 'true' : 'false'); echo 'strcmp("aaa", "AAA"): '.strcmp("aaa", "AAA"); echo 'strcasecmp("aaa", "AAA"): '.strcasecmp("aaa", "AAA"); echo '■数値と文字列の確認 ―――――'; echo '"1" == 1: '.(("1" == 1) ? 'true' : 'false'); echo '"1" === 1: '.(("1" === 1) ? 'true' : 'false'); echo 'strcmp("1", 1): '.strcmp("1", 1); echo '"1.0" == 1: '.(("1.0" == 1) ? 'true' : 'false'); echo '"1.0" === 1: '.(("1.0" === 1) ? 'true' : 'false'); echo 'strcmp("1.0", 1): '.strcmp("1.0", 1); echo '■数字文字列と数字文字列の確認 ―――――'; echo '"1" == "1": '.(("1" == "1") ? 'true' : 'false'); echo '"1" === "1": '.(("1" === "1") ? 'true' : 'false'); echo 'strcmp("1", "1"): '.strcmp("1", "1"); echo '"1.0" == "1": '.(("1.0" == "1") ? 'true' : 'false'); echo '"1.0" === "1": '.(("1.0" === "1") ? 'true' : 'false'); echo 'strcmp("1.0", "1"): '.strcmp("1.0", "1");
PHP技術者への転身
転職しました
2014年3月にSI企業からWeb系サービスを展開している企業に転職しました。
転職の理由はプライベートな理由なので、巷で見かける「SI業界が嫌になって…」といったことではありません。
SI企業には10年程在籍していたので、SI業界の将来には色々と思うこともありますが、それはまた後日。
PHP技術者へ
これまではJavaや.NETで、自社以外の企業のためにシステムを開発することがほとんど。
自社サービスを展開するWeb業界への転身ということで、求められる資質も技術も異なってきます。
今月から本格的に新天地で働いていますが、そこら辺の違いを感じることもしばしばです。
全然経験ないですが、ソースコードを追ってある程度理解することはできるので何とかなっているという状況です。
今はまだ設計フェーズなのでプログラミングを行うことはないのですが、実装フェーズに入った時にどこまでやれるのか…
PHP技術者認定試験
せっかく知らない言語を習得しようとしているので、体系的に技術を身につけたいと思っています。
そこで目を付けたのがPHP技術者認定認定機構が実施している認定試験。
今後、普段の業務で必要に迫られるので実装スキルはある程度身に付くとは思うので、より体系的にスキルアップするためにPHP技術者認定試験を活用しようと考えています。
そこで、
2014年12月末までにPHP技術者認定初級試験を受験します!(できれば上級試験も)
なぜこんな宣言をしたかというと、PHP技術者認定機構がこんなキャンペーンをやってるから、というのもあります(笑)
http://www.phpexam.jp/summary/excamp/?_layoutmode=on
PHP技術者としてスキルアップするために得た知識などはこのブログでも随時アップしていこうと思います。