- 更新日: 2017年06月27日
- 公開日: 2015年12月08日
ゼロから始めるPHP講座Vol27 PHPによるDB操作〜基礎〜
ゼロから始めるPHP講座PHPによるDB操作基礎
PHPによるDB操作
これまでphpMyAdminを利用しWebブラウザ上からデータベース操作を行ってきましたが、今度はプログラムを書いてデータベース操作を行います。
お手本にある通り、プログラムを書いてみましょう。
<pre>
<?php
$host = 'localhost'; // データベースのホスト名又はIPアドレス ※CodeCampでは「localhost」で接続できます
$username = 'username'; // MySQLのユーザ名
$passwd = 'passwd'; // MySQLのパスワード
$dbname = 'dbname'; // データベース名
$link = mysqli_connect($host, $username, $passwd, $dbname);
// 接続成功した場合
if ($link) {
// 文字化け防止
mysqli_set_charset($link, 'utf8');
$query = 'SELECT goods_id, goods_name, price FROM goods_table';
// クエリを実行します
$result = mysqli_query($link, $query);
// 1行ずつ結果を配列で取得します
while ($row = mysqli_fetch_array($result)) {
print $row['goods_id'];
print $row['goods_name'];
print $row['price'];
print "\n";
}
// 結果セットを開放します
mysqli_free_result($result);
// 接続を閉じます
mysqli_close($link);
// 接続失敗した場合
} else {
print 'DB接続失敗';
}
?>
</pre>
phpMyAdminで作成したgoods_tableの全レコード表示を行っています。
- DB接続
- 文字コード設定
- クエリ実行
- 結果を取得
- メモリ開放
- DB切断
という処理を行っています。
DBに接続してSELECT文を実行し全レコード表示」という内容自体はphpMyAdminと同じです。
しかしphpMyAdminでは裏で自動的にやってくれていた処理があり、これをプログラムでは書く必要があります。
DB接続
DB接続は、以下のように行います。
返り値はリンクIDで、「接続したデータベースを特定するためのID」のようなものです。
DB接続は、phpMyAdminにおけるログインと同じ動作となります。
$link = mysqli_connect($host, $username, $passwd, $dbname);
// 接続成功した場合
if ($link) {
// 文字化け防止
mysqli_set_charset($link, 'utf8');
$query = 'SELECT goods_id, goods_name, price FROM goods_table';
// クエリを実行します
$result = mysqli_query($link, $query);
mysql_select.phpの12行目のif文で、接続に成功したか失敗したかの判定を行っています。
もしDB接続に失敗しても処理(プログラム)がそこで止まるわけではなく、ソースコードに従って以降も順に実行されていきます。
DB接続に失敗した後に、この後に学ぶクエリー実行(mysqli_query)やDB切断(mysqli_close)などを行っても必ず失敗するため、無駄な処理となってしまいます。
よって、if文により、以降の処理を行うか否かを決定しています。
実際にif文をコメントアウト又は削除し、接続詞失敗するようにパスワードをわざと誤ったものに変更すると、エラーメッセジが大量に出力されます。
クエリ実行
クエリ実行は、以下のように行います。
SELECT文を発行した場合は結果セットが返りますが、INSERT文やUPDATE文、DELETE文の場合は、TRUEが返ります。
結果セットとは、「SELECTにより選択されたデータのかたまり」のようなものです。
phpMyAdminではSELECT文を入力し実行すれば結果を表示まで自動でやってくれましたが、プログラムの場合、実行結果の何の情報をどのように取得するか、別途指定する必要があります。
結果を取得
実行したクエリの結果取得は、以下のように行います。
取得は1行だけなので、「9章:ファイル操作」にてfgetsでファイル読み込みを行ったとき同様、全ての行を読み込むにはwhile文と組み合わせて使います。
phpMyadminでは裏で自動的にやってくれていた処理ですが、プログラムを書く場合、SELECT文はmysqli_query()とmysqli_fetch_array()がセットとなります。
$query = 'SELECT goods_id, goods_name, price FROM goods_table';
// クエリを実行します
$result = mysqli_query($link, $query);
// 1行ずつ結果を配列で取得します
while ($row = mysqli_fetch_array($result)) {
print $row['goods_id'];
print $row['goods_name'];
print $row['price'];
print "\n";
}
2328行目のwhile文で、1行ずつSELECT文の結果を配列で取得しています。
全ての行の取得が終わるとNULLが返ってくるため、「$row=NULL」となり、while文が終了します。
配列は、キーがカラム名の連想配列となっています。
メモリ解放
メモリ開放は、以下のように行います。
メモリとは、コンピュータ内でデータやプログラムを記憶する装置です。
メモリはデータの保存や取り出しが非常に高速に行えるのが特徴で、一時的なデータの保存場所として利用します。
またメモリにはハードディスクなどと同じく容量があり、容量を超えると、急激に処理が遅くなってしまいます。
結果セットはこのメモリに保存されており、メモリ開放をしなくても現時点では問題が出ませんが、後々のため、mysqli_query()で結果セットを取得した場合、利用し終わったらすぐにmysqli_free_result()で開放しましょう。
DB切断
データベースの切断は、以下のように行います。
DB切断は、phpMyAdminにおけるログアウトと同じ動作となります。
NEXT LESSON ☛ DB操作の使用例
PREV LESSON ☛ Auto Increment(A_I)とは
- この記事を書いた人
- CodeCampus編集部