【php初心者向】データベース取得と表示の方法

どうもにゃおこぱすです。



私は最近、PHPで掲示板サイトを作る機会がありました。

当時はphpでのデータベース操作に慣れていない初心者だったので、取得と表示には四苦八苦してしまい…。



今回は、私と同じようにデータベース操作で、悩める方の時間短縮につながれば良いなという気持ちで執筆しています。



そして今回の記事は下記の方におすすめ!

  • phpのデータベースで取得、表示をしたい
  • 最短でデータベース操作がしたい



私自身業務でデータベースをいじる機会が少なく、

でも体系的に学ぶような時間も取れず…困っていました。




今回の記事は時間の取れない忙しい社会人の方にもおすすめの方法!

『初心者+時間なし』の私でも簡単にデータベースの取得、表示操作を行うことができました!





今回は「php データベース 取得 表示」について自分の備忘録も兼ねて解説します。

結論としては

  • mysql_connectでデータベース接続(5分)
  • mysql_select_dbで使用データベース選択(5分)
  • mysql_queryでデータ取得(10分)
  • while文まわす(10分)

たったこれだけの事でデータベース操作を完結させることができます。




ではひとつひとつ見ていきたいと思います。

データベース接続

データベース接続

$dbhost = "localhost";//接続するホスト名(IPアドレスの指定)
$dbuser = "user";//接続するユーザー名
$dbpass = "pass";//接続するパスワード名


$sql_con = mysql_connect($dbhost,$dbuser,$dbpass);//接続


上記のコードだけで接続することは可能かと思います。

なお、接続するだけなら簡単ですが、ポイントがあります。


それは、セキュリティーを意識した接続です。

ホスト名やユーザー名、パスワード名については、メインのプログラムとは

別のファイルにまとめておきましょう。


アクセス権限についても考えておくべきですが、今回は省略します。

データベース選択

$dbhost = "localhost";
$dbuser = "user";
$dbpass = "pass";
$dbname = "dbname";//データベース名


$sql_con = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname,$sql_con);//データベース名選択※重要

そもそも

データベースの情報を取ってきて欲しい♡

なんて事を言われても、DB側は

え?どのデータベースの情報が欲しいの?

と困惑してしまうわけです。




そこで必要なのが

  • 使用するデータベース名を指定してあげる

ということ。


通常は、同一サーバー内に複数のデータベースが設置してあることが多いでしょうから、

どのデータベースなのか指定するのは重要なことです。


私もデータベース指定は忘れがちなのですが💦



なお、この時点でエラーが出る場合は、パスワード名の指定が誤っている可能性もあります。

デフォルトの設定では、

$dbhost = "localhost";
$dbuser = "root";//rootユーザー
$dbpass = "";// 空
$dbname = "dbname";


$sql_con = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname,$sql_con);


  • ユーザー名:root
  • パスワード名:

になっているかと思います。接続できない場合は試してみてください。

なお、rootは根元、おおもと、のような意味がありますので、

全ての根源、つまり一番強い権限を持つユーザーとなります。





ファイルの読み書きから、実行まで、

あらゆる動作が許可された最強ユーザーと覚えておけば良いでしょう。


通常、会社では担当者でなければ、root権限が与えられることは少ないかと思いますが、

XAMPP環境であれば、デフォルト設定はrootユーザーかと思います。


XAMPP環境の場合は…

なお、xampp含めローカル環境で開発する際は、

あらかじめ下記どちらかにアクセスし、データベースを作成しておくと良いでしょう。

  • 127.0.0.1/phpmyadmin
  • localhost/phpmyadmin



直感的な操作で作成できるかと思います。


phpからテーブル作成

$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "dbname";


$sql_con = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname,$sql_con);


// テーブルのフォーマット指定
$create_sql = "CREATE TABLE IF NOT EXISTS `TABLE` (".
		"ID   INT NULL AUTO_INCREMENT  COMMENT 'ID',".
		"NAME VARCHAR(100) NULL        COMMENT 'NAME',".
		"TEXT TEXT NULL                COMMENT 'TEXT',".
		"DATE DATE NULL                COMMENT 'DATE',".
		"PRIMARY KEY(ID)".
	")";

mysql_query($create_sql, $sql_con);//テーブル作成



今回のテーマはphpでのデータ取得と、表示ですので、詳細は割愛しますが、

  • テーブル名
  • データ型
  • 自動連番(AUTO_INCREMENT)

などを指定し、テーブルを作成します。


慣れるまでは、コピペでも問題ないかと思います。

うん…たしかに。

phpでのデータの取得

$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "dbname";


$sql_con = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname,$sql_con);


$create_sql = "CREATE TABLE IF NOT EXISTS `TABLE` (".
		"ID   INT NULL AUTO_INCREMENT  COMMENT 'ID',".
		"NAME VARCHAR(100) NULL        COMMENT 'NAME',".
		"TEXT TEXT NULL                COMMENT 'TEXT',".
		"DATE DATE NULL                COMMENT 'DATE',".
		"PRIMARY KEY(ID)".
	")";

mysql_query($create_sql, $sql_con);




// **********************
// ココから下が↓取得の処理 ひや...むずい
// **********************

$ret_array  = array();//テキトーな配列にぶっこむ
$select_sql = "select * from `board`";//取得するSQL文

if($res_select = mysql_query($select_sql, $sql_con)){//SQL成功した場合だけ
	while($line_res_select = mysql_fetch_assoc($res_select)){//結果を1行ごとに取得

		$ret_array[] = array(
			'id'   => $line_res_select['ID'],//カラム名がIDの値を取得
			'name' => $line_res_select['NAME'],
			'text' => $line_res_select['TEXT'],
			'date' => $line_res_select['DATE'],
		);

	}
}

ここが割とわかりにくいのですが、

while文で1行ごとに読み込みます。




phpはポインタなるものがありますので、

1行取得した後は、勝手に次の1行を取得してくれます。

  • その読み込んだ配列($line_res_select)の
  • キー名を指定することで($line_res_select[‘ID’])

値を取得可能です。




構造が意味不明…

なんて方は、とりあえず適所適所で、var_dumpなりechoなりしてください。



echo するぐらいなら、別にデータベースが壊れないかと思います。

さすがに無限ループ内で、

大量にSQL(insert文)とか投げてたらやばいかもしれんが。




前、やったけどね。

…。



まあ、自分のlocalサーバーで動かす分には、どうってことないでしょう。

最悪、PG止めりゃいいだけです。





この時点で配列にデータベースの内容を突っ込むことができましたので、

あとの使い方は自由自在。


tdタグで値一つ一つを囲ってテーブル表示するのもアリですし、

加工して、文章中に必要なものだけ埋め込むという使い方もできます。




幅が広がりますよね。

おっと、最後に忘れてはいけない事がありました。

自分で使ったものは?

はあ?
自分で…

お片付けしましょう。



最後に、データベースとの接続を切るのを忘れずにね。

$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbname = "dbname";


$sql_con = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname,$sql_con);


$create_sql = "CREATE TABLE IF NOT EXISTS `TABLE` (".
		"ID   INT NULL AUTO_INCREMENT  COMMENT 'ID',".
		"NAME VARCHAR(100) NULL        COMMENT 'NAME',".
		"TEXT TEXT NULL                COMMENT 'TEXT',".
		"DATE DATE NULL                COMMENT 'DATE',".
		"PRIMARY KEY(ID)".
	")";

mysql_query($create_sql, $sql_con);

$ret_array  = array();
$select_sql = "select * from `board`";

if($res_select = mysql_query($select_sql, $sql_con)){
	while($line_res_select = mysql_fetch_assoc($res_select)){

		$ret_array[] = array(
			'id'   => $line_res_select['ID'],
			'name' => $line_res_select['NAME'],
			'text' => $line_res_select['TEXT'],
			'date' => $line_res_select['DATE'],
		);

	}
}

// **********************
// 忘れんなよこれ↓
// **********************

mysql_close($sql_con);



以上、php言語での

  • データベースで取得、表示
  • 最短でデータベース操作

の方法についてご紹介しました。

最後におまけ。

データベース使い方例

なお、私はポートフォリオがてら、下記の「掲示板」を作ってみたりもしました。

php データベース取得表示|少女画
php データベース取得表示|少女画
  • テーブル作成
  • データ1行毎に取得し配列にぶっこむ
  • liタグ内でデータ表示

ってなことをやってますね。


※掲示板作る際は、このほかにも

  • 入力された値を取得する
  • 入力された値をサニタイズ(無毒化)する
  • SQLでテーブルにデータ挿入する

といった知識が必要になりますが、今回ご紹介した記事で6~7割は出来たようなモンです。





あっという間に作り方をマスターしてしまいましたね!

phpの操作でここまでできたなら、もうあなたは

php MASTERです!!

(適当かよ…)





なおphpでデータベース取得、表示の仕方を更にマスターする際に参考になる本は以下!

phpのデータベース操作参考になる本

初学者におすすめ本-データベース

基礎からのMySQL

こちら私が実際に情報系の学校に通っていた際、学校の教材としても使用されていた

信頼のおける書籍です。




今あまり見る事はありませんが、業務始めたばかりの時は、

よくこれで勉強していました。



Mysqlのみならず、PHPにも焦点を当てた本ですので、

机上の空論ではなく、実務でも役に立つ1冊になるかと思います。


実務経験アリの方におすすめ本-データベース

こちら、既にSQLをある程度触ることができ、

更にパフォーマンスも意識したいという方におすすめの本です。



私は、会社の上司に本の著者の方のサイトを教わり、

入社当初は、無料公開されているサイトでしばしばSQLの勉強をしていました。


【参考】

リレーショナル・データベースの世界

ちょっと哲学的な言い回しなどもありますが、

著者の方は相当に頭が良い方なんだろうと思います。



インデックスまわり、実行文の速度に関してなど、実務の

パフォーマンス向上において、大いに役立ちました。



まとめ

IT業界は移り変わりが激しいです。



私は、ITの中でも別にそんなに移り変わりを体感してない分野なので、実感ないですが、

ITは移り変わりが激しい業界、らしいです。


去年まで当たり前だったものが

いつのまにか少数派になるなんてのはよくある話なのかもしれません。




一方で、データベース周りの知識は、割と「コア=核」の部分かと思いますので、

廃れることがないモノかと思います。


つまりは、一度覚えたら、着実に自分に積み重ねられる財産のようなもの。



うん、それっぽい。

  • MySQL
  • SQLite
  • PostgreSQL

などで多少の違いはあるかもしれませんが、私が今回紹介したのは、

だいたいどれでも使えるような話かと。


※私はほぼ、Mysqlしか使っとらんから、他はよく知らんがw





まあ何はともあれ今回のphpでのデータベースの使い方に関して、

ぜひ、仕事の場でも役立て頂けたら幸いです。



以上、新人プログラマーが1年前の自分に向けて記事を執筆しました。では、またどこかで。


にゃおこぱす

この記事を書いた人

少女画-にゃおこぱす

元プログラマ。少女イラスト愛好家。石川出身。絶望的に才能が無かったので描くのはあきらめました。その代わり情報発信に徹したいと思いますです!(普段はココナラにてmiiyayaの名前で、イラストレーター向けにホームページ制作、ショップ制作のご相談も承っております。ご依頼はこちらより)

(Twitterはこちら)