LoginSignup
0
0

More than 3 years have passed since last update.

【備忘録です】【PHP】DB操作

Last updated at Posted at 2020-07-20

備忘録です

DB操作のイメージを掴むために残します。

phpMyAdminを使ってWebブラウザ上からDB操作を行ってきましたが、コードを書いてDB操作を行うこともできます。

sample.php



<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接続

sample.php

mysqli_connect($host, $username, $passwd, $dbname)

$host
   データベースのホスト名又はIPアドレス
$username
   MySQLのユーザ名
$passwd
   MySQLのパスワード
$dbname
   データベース名

//機能
   //データベースへ接続
//返り値
   //リンクID(サーバへの接続を表すオブジェクト)
   //失敗するとFALSEを返す

mysqli_connect()にデータべースの情報を渡すことで、接続ができます。
返り値はリンクIDで、「接続したデータベースを特定するためのID」のようなものです。
DB接続は、phpMyAdminにおけるログインと同じ動作になります。

sample.php
$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文を用いて以降の処理を行うかどうかを決定しています。

クエリ実行

クエリ実行は以下のように行れます。

sample.php
mysqli_query($link, $query)

$link
   リンクID
$query
   実行するクエリ

//機能
   //クエリを実行する
//返り値
   //成功すると結果セット、もしくはTRUEを返す
   //失敗するとFALSEを返す

mysqli_query()は、実行する命令によって成功時の返り値が変わります。

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

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

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

結果を取得

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

sample.php

mysqli_fetch_array($result)

$result 
   結果セット

//機能
   //結果セットを配列として返す

//返り値
   //成功すると行の配列を返す
   //読み込むデータがなくなるとNULLを返す
   //失敗するとFALSEを返す

fetchとは「取ってくる」という意味で、SELECTした結果を1行だけ配列として取得します。
取得は1行だけなので、全てのファイルを読み込むにはwhile文と組み合わせて使います。
phpMyAdminでは裏で自動的にやってくれていた処理ですが、プログラムを書く場合、SELECT文はmysqli_query()mysqli_fetch_array()がセットになります。

メモリ開放

sample.php
mysqli_free_result($result)

$result
   結果セット

//機能
   //結果に関連付けられたメモリを開放する

//返り値
   //値を返さない

メモリとは、コンピュータ内でデータやプログラムを記憶する装置です。
メモリはデータの保存や取り出しが高速で行え、一時的なデータの保存場所として利用します。
またメモリには容量があり、容量を越えると急激に処理が遅くなります。
結果セットはこのメモリに保存されており、メモリ開放をしなくても現時点では問題はないですが、
後々のためmysqli_query()で結果セットを取得した場合、利用し終わったらすぐにmysqli_free_result()で開放しましょう。

DB切断

DB切断は以下のように行います。

sample.php


mysqli_close($link)

   $link: リンクID

//機能
    //データベースから切断する

//返り値
   //成功するとTRUEを返す
   //失敗するとFALSEを返す

ファイル操作と同様、データベースに接続している時間は可能な限り短いほうがいいためSELECTや INSERTなどの必要な処理が終わったらすぐに切断します。

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0