PHP からMySQLへの接続
1. PHPをMySQLに接続する
PHPでMySQLデータベースを操作する場合、主に以下の2つの拡張機能(Extensions)がサポートされています。
- MySQLi (MySQL Improved)
- PDO (PHP Data Objects)
2. MySQLiとPDOのどちらを使うべきか?
結論から言えば、「どちらでも好みのほうを使って良い」ということになります。
ただし、それぞれに以下のような利点があります。
- PDOは、12種類の異なるデータベースシステムに対応しています。一方、MySQLiはMySQLデータベースのみに対応しています。そのため、将来的にプロジェクトで別のデータベースへの切り替えが必要になった場合、PDOであれば接続文字列(Connection String)と少数のクエリを修正するだけで済みます。MySQLiの場合は、クエリを含めたコード全体を書き直す必要があります。
- どちらもオブジェクト指向(Object-Oriented)をサポートしていますが、MySQLiは手続き型(Procedural)のAPIも提供しています。
- どちらもプリペアドステートメント(Prepared Statements)をサポートしています。これはSQLインジェクションからアプリケーションを保護するために非常に重要であり、Webアプリケーションのセキュリティに欠かせません。
3. MySQLiとPDOの構文比較
本章および以降の章では、PHPとMySQLを連携させる3つの方法を実演します。
- MySQLi(オブジェクト指向)
- MySQLi(手続き型)
- PDO
3.1 MySQLiのインストール
LinuxやWindowsの場合:ほとんどの場合、php-mysql パッケージをインストールすると、MySQLi拡張機能も自動的にインストールされます。
3.2 PDOのインストール
インストールの詳細については、公式ドキュメントを参照してください。
4. MySQLへの接続を開く
MySQLデータベース内のデータにアクセスする前に、まずはサーバーに接続できる必要があります。
通常、接続には「サーバー名」「ユーザー名」「パスワード」「データベース名」の4つの情報が必要です。
例:MySQLi オブジェクト指向
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mydb";
// 接続の作成
$conn = new mysqli($servername, $username, $password, $dbname);
// 接続の確認
if ($conn->connect_error) {
die("接続に失敗しました: " . $conn->connect_error);
}
echo "接続に成功しました";
?>例:MySQLi 手続き型
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mydb";
// 接続の作成
$conn = mysqli_connect($servername, $username, $password, $dbname);
// 接続の確認
if (!$conn) {
die("接続に失敗しました: " . mysqli_connect_error());
}
echo "接続に成功しました";
?>例:PDO
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mydb";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// PDOのエラーモードを例外に設定
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "接続に成功しました";
} catch(PDOException $e) {
echo "接続に失敗しました: " . $e->getMessage();
}
?> ヒント: PDOの大きな利点は、データベースクエリで発生した問題を処理するための例外(Exception)クラスを持っていることです。try { } ブロック内で例外がスローされると、スクリプトの実行が停止し、最初の catch(){ } ブロックに処理が移ります。
5. MySQLへの接続を閉じる
接続は、スクリプトが終了すると自動的に閉じられます。スクリプトの途中で明示的に接続を閉じたい場合は、以下の方法を使用します。
例:MySQLi オブジェクト指向
$conn->close();例:MySQLi 手続き型
mysqli_close($conn);例:PDO
$conn = null;