XAMPPでPHPを使ってMySQLにアクセスする

目標

本記事の目標は、XAMPP上でPHPを使って、MariaDB(MySQLデータベース)にアクセスすることです。

環境

Windows10
XAMPP 7.4.10

事前準備として、XAMPPをインストールします(参考: XAMPPのインストール)。また、MariaDBを本番環境で使用する場合は、パスワードを設定し安全に使用できるようにします(XAMPPでMySQLパスワードを設定する)。

また、自分の環境では、”photo_sharing”という名前のデータベースを作成してあります(参考: XAMPPでMaria DBのデータベースを作る)

PDOについて

PDO(PHP Data Objects)は、PHPでデータベースにアクセスするための拡張モジュールです。

参考: PHP Data Objects (PHPマニュアルより)

xampp/php/php.ini.で、pdo_mysqlがextentionに指定されています。つまり、XAMPPのMariaDB(MySQL)へPDOを使ってアクセスすることが可能です。

extension=mysqli
// omited
extension=pdo_mysql

方法

1. PHPファイル”getuser.php”を作成

getuser.php

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Users</title>
</head>
<body>
	<?php
		//input php here
	?>
</body>
</html>

2. PDOインスタンスを追加

PDO_MYSQL DSNの例を参考に、PDOクラスのインスタンスを追加します。今回は、特別なオプションは使用しません。

<?php
$dsn = 'mysql:host=localhost;dbname=photo_sharing';
$username = 'root';
$password = '********';

$dbh = new PDO($dsn, $username, $password, $options);
?>

new PDO(<DSN>, <UserName>, <Password>); でPDOのインスタンスが作成できます。

<DSN>は、’mysql:host=<host of database server>;dbname=<database name>’ という文字列です。
<UserName>と<host of database server>は、 phpMyAdminで確認できます。

<Password>は、設定したパスワードです.

3. PDOが正常に接続できているか確認します

try catch文を使って、正常に接続できているか(エラーが起こっていないか)確かめます。

<?php
$dsn = 'mysql:host=localhost;dbname=photo_sharing';
$username = 'root';
$password = '********';

try {
    $dbh = new PDO($dsn, $username, $password);
    echo "<p>Succeed!</p>";
} catch (PDOException $e) {
    echo "<p>Failed : " . $e->getMessage()."</p>";
    exit();
}
?>

PHPファイルをドキュメントルートディレクトリ(デフォルトでは、xampp/htdocs)に配置します。今回は、新しいディレクトリxampp/htdocs/testdbを作成しました。

getuser.phpを配置したディレクトリ(今回の例では、localhost/testdb/getuser.php)にアクセスします。正常に接続できれば、Succeed!が表示されます。

何か問題があれば、接続が失敗し、エラーが表示されます。

失敗例1 パスワードミス
失敗例2 データベース名のミス

4. SQL文を作成します。

このチュートリアルでは、’select’文を使用してデータベースからデータを取得します。次の例は、データベースの”user”テーブルから全てのデータを取得する例です。作成したsql文は、PDO::prepare()関数に渡します。

$sql = 'select * from user';
$sth = $dbh->prepare($sql);

5. 作成したSQLを実行し、結果を得ます

PDO::execute()関数で、SQLを実行します。その後、PDO::fetch()関数を使って、結果を読み出します。

$sth->execute();
$result = $sth->fetchAll(); //get all data at this time

6. 結果を出力します

foreach ($result as $row) {
        echo $row['id']." ";
        echo $row['name']." ";
        echo $row['age']." ";
        echo "<br />";
}

getuser.php

最終的なgetuser.phpのソースコードは以下のようになります。

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Users</title>
</head>
<body>
<?php
$dsn = 'mysql:host=localhost;dbname=photo_sharing';
$username = 'root';
$password = '********';

try {
	$dbh = new PDO($dsn, $username, $password);
	echo "<p>Succeed!</p>";
		
	$sql = 'select * from user';
	$sth = $dbh->prepare($sql);
	$sth->execute();
	$result = $sth->fetchAll();
	
	foreach ($result as $row) {
		echo $row['id']." ";
		echo $row['name']." ";
		echo $row['age']." ";
		echo "<br />";
	}
} catch (PDOException $e) {
	echo  "<p>Failed : " . $e->getMessage()."</p>";
	exit();
}
?>
</body>
</html>

結果

localhost/testdb/getuser.phpに再びアクセスすると、データベースに保存されているリストが表示されています。