PHPでMySQLへ接続する方法

PHPはデータベースと親和性が高い言語です。あらかじめ、データベースを扱うための仕組みが内蔵されています。

MySQLをはじめ、さまざまなデータベースと接続することができます。

その仕組みがPDOです。

PDOとは?

PDOは「PHP Data Objects」の略で、PHPをさまざまなデータベースに同じような方法で接続できる仕組みです。

PHP5.1以降、標準で対応しています。

PDOの O は Objects です。つまり、いくつかのクラスから成り立っているオブジェクト指向のデータベース接続方法ですので、まずはインスタンスをnew で作る必要があります。

その方法は以下のように行います。

変数 = new PDO(データソース,ユーザ名,パスワード);

MySQLでの接続

PDOインスタンスを生成する際のデータソース部分は各データベースによって書き方が異なります。

MySQLの場合、以下のように書きます。

mysql:dbname=データベース名; host=ホスト名

hostが同じコンピュータの場合、省略も可能です。

例えばデータベース名が hanbai の場合、以下のように書きます。

$db = new PDO("mysql:dbname=hanbai","ユーザ名","パスワード");

SQLの実行

PDOにおいてもデータベースを扱うための命令はSQLを使います。

SQLを使うには、まずPDOオブジェクトのprepareメソッドでSQLを使うための準備を行います。

例えば、shouhinテーブルが全ての項目を取得するSQLを用意します。

$sql = $db->prepare( 'SELECT * FROM shouhin');

prepareメソッドを実行するとPDOStatementクラスのオブジェクトが返されます。

ただし、prepareメソッドを実行しただけではSQLは実行されたわけではありません。

SQLを実行するには返されたPDOStatementクラスのexecuteメソッドを実行します。

$sql->execute();

結果の取り出し

SELECT文などの場合、実行した結果を取り出さなくてはなりません。

この場合、PDOStatementクラスのfetchメソッドで結果を一行文取り出すことができます。

$data = $sql->fetch();

取り出した変数は列名の連想配列となっています。

例えば name という列があった場合、以下のように表示できます。

echo $data['name'];

fetchメソッドでは一行文しかデータを取得できないため、全データを取得する場合 fetchAll メソッドを使います。

これは行の配列となっています。

$all = $sql->fetchAll();
foreach ($all as $data)
{
	echo $data['name'];
}

まとめ

ここまでのコード、shouhinテーブルの name 列を表示する方法をまとめます。

$db = new PDO("mysql:dbname=hanbai","ユーザ名","パスワード");

$sql = $db->prepare( 'SELECT * FROM shouhin');

$sql->execute();

$all = $sql->fetchAll();

foreach ($all as $data)
{
	echo $data['sname'];
}

$sql = null; // オブジェクトの開放

イベント

2017/12/05(火)
Design Thinking Square