関連記事
PHPからデータベースを操作する手順
この記事の動画版はこちら(画像クリックでYoutubeに飛びます)
今回は「PHPからデータベースを操作する手順」について、ご説明します。
・PHPでデータベースにアクセスする手順が知りたい。
・fetch()とfetchAll()って何が違うの?
このような疑問をお持ちの方はぜひご覧ください!
PHPからデータベースを操作する手順(テンプレ)
PHPからデータベースを操作する手順は以下のようになります。
この手順はテンプレなので、覚えておきましょう!
1.データベースに接続する。
2.実行したいSQL文をセットする。
3.SQLに対してパラメーターをセットする。【任意】
4.実際にSQLを実行する。
5.結果を取得する。【任意】
6.データーベースから切断する。
ちなみに、PHPのソースコードの中でデータベース処理を複数行う場合、1(接続)と6(切断)は、PHPの最初と最後でそれぞれ一度だけ行えばOKです。
ソースコードはこんな感じです。
// 1.データベースに接続する。 $pdo = new PDO('mysql:dbname=データベース名;host=ホスト名;' , 'ユーザー名', 'パスワード'); $pdo->query('SET NAMES utf8;'); // 2.実行したいSQL文をセットする。 $stmt = $pdo->prepare('SELECT * FROM user WHERE mail_address = :mail_address LIMIT 1'); // 3.SQLに対してパラメーターをセットする。【任意】 $stmt->bindValue(':mail_address', $mail_address, PDO::PARAM_STR); // 4.実際にSQLを実行する。 $stmt->execute(); // 5.結果を取得する。【任意】 $user = $stmt->fetch(); // 6.データーベースから切断する。 unset($pdo);
【手順1】データベースに接続する。
$pdo = new PDO('mysql:dbname=データベース名;host=ホスト名;' , 'ユーザー名', 'パスワード');
まずは、この1行でデータベースに対して接続を行います。
データベースへの処理には、「PDO」というPHPであらかじめ用意されたデータベース処理用のクラス(機能)を使います。
PDOクラスに対して以下の4つの情報を指定することで、データベースに接続されます。
・データベースが置かれているホスト名(サーバー名)
・接続するデータベース名
・データベースに接続する際のユーザー名
・データベースに接続する際のパスワード
データベースに接続したら、文字化けしないようにプログラムで使用する「文字コード」を指定しておきます。(この例ではutf8を指定しています)
$pdo->query('SET NAMES utf8;');
【手順2】実行したいSQL文をセットする。
$stmt = $pdo->prepare('SELECT * FROM user WHERE mail_address = :mail_address LIMIT 1');
次に、実際にデータベースに対して行いたい処理を「SQL言語」を使って記述します。
プログラムからデータベースに対して行う命令は、基本以下の4種類となります。
SELECT文:データを「検索して取り出す」
INSERT文:データを「新規に登録」する
UPDATE文:データを「変更」する
DELETE文:データを「削除」する
なお、この例のように、SQL文の中でパラメーターを指定する場合は、SQLに直接値や変数を書かずに「プレースホルダ」というものを使います。
これは、SQLインジェクション対策というセキュリティ対策のためです。
このように、SQL文の中にPHP変数($mail_address)を直接書かずに、
悪い例)
SELECT * FROM user WHERE mail_address = $mail_address LIMIT 1
プレースホルダ(:で始まる代替文字列)を指定しておきます。
良い例)
SELECT * FROM user WHERE mail_address = :mail_address LIMIT 1
プレースホルダには、次の「手順3」で実際のデータがセットされます。
【手順3】命令に対してパラメーターをセットする【任意】
$stmt->bindValue(':mail_address', $mail_address, PDO::PARAM_STR);
SQL文でプレースホルダを指定した場合は、この手順で実際の値をセットします。
SQL文にパラメータが無い場合は、この手順は不要です。
逆に、複数のプレースホルダがある場合は上記を複数行書きます。
プレースホルダについては、以下の記事で詳しく説明しています。
【手順4】実際に命令を実行する
$stmt->execute();
execute()を呼び出すと、データベースに対して実際に命令が実行されます。
INSERT、UPDATE、DELETE文についてはここで処理は終了です。
【手順5】結果を取得する【任意】
$user = $stmt->fetch();
SELECT文の場合は、データベースから取得したデータを取り出します。
この例では、取得した結果データは$userという変数に入ります。
データベースから取得したデータは、$user['カラム名']という指定で取り出すことが出来ます。
例)idカラムのデータは、$user['id']と書けば取得可能です。
【手順6】データーベースから切断する(コネクション破棄)
unset($pdo);
最後にunsetすることで、データベースへの接続が切断されます。
fetch()とfetchAll()って何が違う?
fetch()というのは、SQLの実行結果が「1件」の場合の取り出し方です。
上の例では、SELECT文の末尾に「LIMIT 1」を指定して結果データを1件のみ取得しているため、fetch()を使っています。
1件ではなく、結果データが複数件ある場合には、fetch()の代わりにfetchAll()を使います。
結果データが「1件」の場合 ⇒ fetch()
結果データが「複数件」の場合 ⇒ fetchAll()
このように覚えておきましょう!
まとめ
PHPからデータベースを操作する際の手順は以下のようになります。
1.データベースに接続する。
2.実行したいSQL文をセットする。
3.SQLに対してパラメーターをセットする。【任意】
4.実際にSQLを実行する。
5.結果を取得する。【任意】
6.データーベースから切断する。
実際の開発では、関数やフレームワークによって処理が共通化されていたりするため、上記の手順全てを書かなくても良いことも多いですが、この手順を覚えておけば、ソースコードが白紙の状態からでもデータベース処理を書くことが出来ます。
基本の手順として、ぜひ覚えておきましょう!