PHPでMySQL データベースに接続する
多くのWebサービスで利用されているデータベース MySQL。Webページからだとプログラミングを駆使してデータベースのデータを取得して内容を表示したりします。ここではPHPでMySQLに接続してデータを取得する方法をご紹介します。
例としてMacのMAMPのローカル開発環境で説明をしていきます。
ですのでホストはlocalhostとなります。
また今回のPHPでもMySQL接続方法はPHP7にも対応している内容となっています。
サンプルでのデータベースの構造は「project02」というデータベースがあり「first」というテーブルに名前やメールアドレスが格納されているとします。
こちらのデータベースの情報をPHPプログラミングでWebページに表示させます。
データベースとのやり取りをする言語、SQL文でデータを取得してPHPとHTMLでプログラミング、マークアップをしてきます。
PHPでデータベースに接続
MySQLi関数を使ってデータベースに接続し、newでインスタンスを生成します。
$変数名 = new mysqli("ホスト名", "ユーザ名", "パスワード", "データベース名");
生成されてインスタンスを変数「db」に格納して、その後のデータベースとのやり取りを行っていきます。
まずはサンプルコードを見てみましょう。
PHP
<?php //データベースに接続 $db = new mysqli('localhost', 'root', 'root', 'project02'); if ($db->connect_error) { echo $db->connect_error; exit(); } else { $db->set_charset("utf8"); } echo "<table>"; //SQL文でデータを取得 $sql = "SELECT name, email FROM first"; if ($result = $db->query($sql)) { //連想配列を取得 while ($row = $result->fetch_assoc()) { echo "<tr><td>" . $row["name"] . "</td><td>" . $row["email"] . "</td></tr>"; } //結果を閉じる $result->close(); } echo "</table>"; //データベース切断 $db->close(); ?>
mysqli(MySQL improved extension)はPHPからMySQLやMariaDBを操作するためのインターフェースを提供するPHPの拡張機能です。
以前のmysql関数はPHP5.5からは非推奨となりPHP7からは廃止されているので、mysqlではなくmysqliを利用します。
if文で「$db->connect_error」としてデータベースの接続に失敗したら「connect_error」で接続エラーの内容を返して「exit();」でそのまま終了させます。
elseでデータベースに接続できたら文字化けしないようにデータベースオブジェクトに対して「set_charset(“utf8”);」で文字コードをutf8に設定します。
変数「sql」にはSQL文を格納して、if文で変数「result」にqueryメソッド「query()」を使いSQL文をデータベースへ送信して結果を格納します。
その$resultに対して「fetch_assoc()」で結果の行を連想配列で取得して変数「row」にレコードを格納します。
連想配列
array ("name" => "山田 太郎", "email" => "t.yamada@gmail.com")
それをwhile文でレコードの数だけ繰り返し処理をさせて、$rowの連想配列のキー「フィールド名」を展開してあげれば値が表示できます。
サンプルコードではHTMLのtableタグを使い、レコードの数だけtrタグとtdタグで表示させるという内容です。
「$result->close();」で結果がなくなればSQL文での検索結果の接続を閉じます。
そして最後に「$db->close();」でデータベースとの接続も閉じます。
HTMLも含め、まとめたコードがこちら。
ファイル名は適当にdb-connectとしました。
db-connect.php
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title>MySQL DB Connect</title> <meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> <meta name="keywords" content=""> <meta name="description" content=""> <link rel="stylesheet" href="css/style.css"> </head> <body> <header> </header> <main> <div id="main"> <?php //データベースに接続 $db = new mysqli('localhost', 'root', 'root', 'project02'); if ($db->connect_error) { echo $db->connect_error; exit(); } else { $db->set_charset("utf8"); } echo "<table>"; //SQL文でデータを取得 $sql = "SELECT name, email FROM first"; if ($result = $db->query($sql)) { //連想配列を取得 while ($row = $result->fetch_assoc()) { echo "<tr><td>" . $row["name"] . "</td><td>" . $row["email"] . "</td></tr>"; } //結果を閉じる $result->close(); } echo "</table>"; //データベース切断 $db->close(); ?> </div> </main> <footer> </footer> </body> </html>
実際にWebページにアクセスしてみます。
データベースに入っている情報が表示されたのが確認できます。
今回はSQL文のSELECT文で結果を表示させる内容でしたが、Webページからユーザーが入力した情報をINSERT文でデータベースにデータを追加したりといろいろできますので試しに遊んでみてください。