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!が表示されます。

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


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に再びアクセスすると、データベースに保存されているリストが表示されています。
