ゼロから始めるPHP講座Vol27 PHPによるDB操作〜基礎〜


ゼロから始めるPHP講座Vol27 PHPによるDB操作〜基礎〜
目次
  1. ゼロから始めるPHP講座PHPによるDB操作基礎
  2. PHPによるDB操作
  3. DB接続
  4. クエリ実行
  5. 結果を取得
  6. メモリ解放
  7. 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の全レコード表示を行っています。PHP-DB1-1-639

  • DB接続
  • 文字コード設定
  • クエリ実行
  • 結果を取得
  • メモリ開放
  • DB切断

という処理を行っています。

DBに接続してSELECT文を実行し全レコード表示」という内容自体はphpMyAdminと同じです。

しかしphpMyAdminでは裏で自動的にやってくれていた処理があり、これをプログラムでは書く必要があります。

DB接続

DB接続は、以下のように行います。PHP-DB1-2-639

返り値はリンク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文をコメントアウト又は削除し、接続詞失敗するようにパスワードをわざと誤ったものに変更すると、エラーメッセジが大量に出力されます。

クエリ実行

クエリ実行は、以下のように行います。PHP-DB1-3-639

SELECT文を発行した場合は結果セットが返りますが、INSERT文やUPDATE文、DELETE文の場合は、TRUEが返ります。

結果セットとは、「SELECTにより選択されたデータのかたまり」のようなものです。

phpMyAdminではSELECT文を入力し実行すれば結果を表示まで自動でやってくれましたが、プログラムの場合、実行結果の何の情報をどのように取得するか、別途指定する必要があります。

結果を取得

実行したクエリの結果取得は、以下のように行います。PHP-DB1-4-639

取得は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文が終了します。

配列は、キーがカラム名の連想配列となっています。PHP-DB1-5-639

メモリ解放

メモリ開放は、以下のように行います。PHP-DB1-6-639

メモリとは、コンピュータ内でデータやプログラムを記憶する装置です。

メモリはデータの保存や取り出しが非常に高速に行えるのが特徴で、一時的なデータの保存場所として利用します。

またメモリにはハードディスクなどと同じく容量があり、容量を超えると、急激に処理が遅くなってしまいます。

結果セットはこのメモリに保存されており、メモリ開放をしなくても現時点では問題が出ませんが、後々のため、mysqli_query()で結果セットを取得した場合、利用し終わったらすぐにmysqli_free_result()で開放しましょう。

DB切断

データベースの切断は、以下のように行います。 PHP-DB1-7-639

DB切断は、phpMyAdminにおけるログアウトと同じ動作となります。

NEXT LESSON ☛ DB操作の使用例

PREV LESSON ☛ Auto Increment(A_I)とは

image


CodeCampus編集部
この記事を書いた人
CodeCampus編集部
まずは7日間お試し!人気プログラミング講座を無料公開中
オンライン・プログラミングレッスンNo.1のCodeCamp