##備忘録です
DB操作のイメージを掴むために残します。
phpMyAdminを使ってWebブラウザ上からDB操作を行ってきましたが、コードを書いてDB操作を行うこともできます。
<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>
クエリ・・・DBに対する命令文のことです。
mysqli_set_charset・・・クライアントのデフォルト文字セットを設定しています。
mysqli_query・・・データベース上でクエリを実行します。
mysqli_fetch_array・・・結果の行を連想配列・数値添字配列あるいはその両方で取得します。
mysqli_free_result・・・結果に関連付けられたメモリを解放します。
上記のコードでは
1.DB接続
2.文字コード設定
3.クエリ実行
4.結果を取得
5.メモリ解放
6.DB切断
という処理を行っており、
DBに接続してSELECT文を実行し全レコードを表示ということをしています。phpMyAdminでは裏で自動でやってくれていましたが、今回の場合は書く必要があります。
##DB接続
mysqli_connect($host, $username, $passwd, $dbname)
$host
データベースのホスト名又はIPアドレス
$username
MySQLのユーザ名
$passwd
MySQLのパスワード
$dbname
データベース名
//機能
//データベースへ接続
//返り値
//リンクID(サーバへの接続を表すオブジェクト)
//失敗するとFALSEを返す
mysqli_connect()にデータべースの情報を渡すことで、接続ができます。
返り値はリンク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);
上記のif文で接続に成功したか失敗したかの判定を行っています。
もしDB接続に失敗しても処理が止まるわけではなく、ソースコード従って以降も順に実行されていきます。
DB接続に失敗した後に、クエリー実行(mysqli_query)やDB切断(mysqli_cliose)などを行っても必ず失敗するため、無駄な処理となってしまいます。
そのため、if文を用いて以降の処理を行うかどうかを決定しています。
##クエリ実行
クエリ実行は以下のように行れます。
mysqli_query($link, $query)
$link
リンクID
$query
実行するクエリ
//機能
//クエリを実行する
//返り値
//成功すると結果セット、もしくはTRUEを返す
//失敗するとFALSEを返す
mysqli_query()は、実行する命令によって成功時の返り値が変わります。
SELECT文を発行した場合は、結果セットが返りますが、INSERET文やUPDATE文、 DELETE文の場合はTRUEが返ります。
結果セットとは、「SELECTにより選択されたデータのかたまり」のようなものです。
phpMyAdminではSELECT文を入力し実行すれば結果を表示まで自動でやってくれましたが、プログラムの場合は実行結果の何の情報をどのように取得するか、別途指定する必要があります。
##結果を取得
実行したクエリの結果取得は、以下のように行います。
mysqli_fetch_array($result)
$result
結果セット
//機能
//結果セットを配列として返す
//返り値
//成功すると行の配列を返す
//読み込むデータがなくなるとNULLを返す
//失敗するとFALSEを返す
fetchとは「取ってくる」という意味で、SELECTした結果を1行だけ配列として取得します。
取得は1行だけなので、全てのファイルを読み込むにはwhile文と組み合わせて使います。
phpMyAdminでは裏で自動的にやってくれていた処理ですが、プログラムを書く場合、SELECT文は**mysqli_query()とmysqli_fetch_array()**がセットになります。
##メモリ開放
mysqli_free_result($result)
$result
結果セット
//機能
//結果に関連付けられたメモリを開放する
//返り値
//値を返さない
メモリとは、コンピュータ内でデータやプログラムを記憶する装置です。
メモリはデータの保存や取り出しが高速で行え、一時的なデータの保存場所として利用します。
またメモリには容量があり、容量を越えると急激に処理が遅くなります。
結果セットはこのメモリに保存されており、メモリ開放をしなくても現時点では問題はないですが、
後々のためmysqli_query()で結果セットを取得した場合、利用し終わったらすぐにmysqli_free_result()で開放しましょう。
##DB切断
DB切断は以下のように行います。
mysqli_close($link)
$link: リンクID
//機能
//データベースから切断する
//返り値
//成功するとTRUEを返す
//失敗するとFALSEを返す
ファイル操作と同様、データベースに接続している時間は可能な限り短いほうがいいためSELECTや INSERTなどの必要な処理が終わったらすぐに切断します。
DB切断は、phpMyAdminにおけるログアウトと同じ動作となります。