PHPでデータベースに接続する際、PDOとmysqliのどちらを使うべきか迷う方は多いと思います。また、PDOの基本的な接続方法がわからず、エラーが発生して困っている方もいるでしょう。
PDOはPHP Data Objectsの略で、複数のデータベースに対応した統一的なインターフェースを提供します。セキュリティ面でも優れており、現在のPHP開発では主流の接続方法となっています。
この記事では、PHPのPDOを使ってMySQLに接続する具体的な方法、PDOとmysqliとの違いについて解説していきます。
PHPのPDOでMySQLのDBに接続する方法
PHPのPDOを使ってMySQLに接続するには、PDOクラスのインスタンスを作成する必要があります。接続には、データソース名(DSN)、ユーザー名、パスワードの3つの情報が必要です。
接続をする手順として、以下の3工程を理解していきましょう。
- PDOクラスをインスタンス化してMySQLに接続する
- DSNの設定内容を確認する
- エラーモードを設定する
これらの手順を順番に実行することで、安全にMySQLへ接続できます。エラーハンドリングも適切に設定すれば、問題発生時にも対応しやすくなります。
それでは各項目について、詳しく解説していきます。
PDOクラスをインスタンス化してMySQLに接続する
PDOクラスをインスタンス化することで、MySQLへの接続を確立できます。newキーワードを使ってPDOオブジェクトを生成し、変数に代入します。
基本的な接続コードは、以下の通りです。
<?php
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8';
$user = 'root';
$password = 'password';
try {
$dbh = new PDO($dsn, $user, $password);
echo "接続成功";
} catch (PDOException $e) {
echo "接続失敗: " . $e->getMessage();
exit();
}
?>
このコードでは、try-catch文を使って例外処理を実装しています。接続に成功すると、$dbh変数にPDOインスタンスが格納され、失敗した場合はPDOExceptionがスローされます。
変数名$dbhは、database handlerの略として一般的に使用されています。接続後はこのインスタンスを通じて、データベース操作を行います。
【PR】プログラミングや生成AIを無料で学べる「コードキャンプフリー」
DSNの設定内容を確認する
DSN(Data Source Name)は、接続先データベースの情報を指定する文字列です。mysql、host、dbname、charsetの4つのパラメータを適切に設定する必要があります。
DSNの各パラメータの役割は、以下の通りです。
| パラメータ | 説明 |
|---|---|
| mysql | 使用するデータベースの種類を指定 |
| host | 接続先のホスト名またはIPアドレスを指定 |
| dbname | 使用するデータベース名を指定 |
| charset | 文字エンコーディングを指定(utf8またはutf8mb4を推奨) |
コロン(:)とセミコロン(;)の使い分けに注意が必要で、データベース種類の後はコロン、各パラメータの区切りはセミコロンを使用します。
文字化けを防ぐため、charsetには必ずutf8またはutf8mb4を指定してください。utf8mb4は絵文字にも対応しているため、より推奨されます。
エラーモードを設定する
エラーモードを設定することで、SQL実行時のエラーを適切に処理できます。setAttributeメソッドを使用して、エラー発生時の動作を制御します。
推奨されるエラーモードの設定は、以下の通りです。
<?php
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>
PDO::ERRMODE_EXCEPTIONを設定すると、エラー発生時にPDOExceptionがスローされます。これにより、try-catch文でエラーを捕捉し、適切な処理を実行できます。
エラーモードには他にも、PDO::ERRMODE_SILENTやPDO::ERRMODE_WARNINGがありますが、エラーの原因を特定しやすくなるため、開発時はEXCEPTIONモードが推奨されます。
PHPのmysqliとPDOの違い
PHPでMySQLに接続する方法として、mysqliとPDOの2つが存在します。それぞれ異なる特徴を持っており、用途に応じて使い分ける必要があります。主な違いは、以下の3つです。
- 対応データベースの違い
- セキュリティ機能の違い
- 記述方法の違い
これらの違いを理解することで、プロジェクトに適した接続方法を選択できます。現在の開発では、汎用性とセキュリティの観点から、PDOが推奨されています。
それでは各項目について、詳しく解説していきます。
【PR】『Python』を学べる企業・個人向けのプログラミングコース
対応データベースの違い
mysqliとPDOでは、対応できるデータベースの種類が大きく異なります。この違いが将来的なデータベース変更の柔軟性に影響します。
対応データベースの比較は、以下の通りです。
| 接続方法 | 対応データベース |
|---|---|
| mysqli | MySQLとMariaDBのみ |
| PDO | MySQL、PostgreSQL、SQLite、Oracle、SQL Serverなど12種類以上 |
PDOは複数のデータベースに対応しているため、将来的にデータベースを変更する可能性がある場合に有利です。データベースを変更しても、DSNの記述を変更するだけで対応できます。
mysqliはMySQL専用に最適化されているため、MySQLのみを使用し続ける場合は良いかもしれません。ただし、繰り返しになりますが、現在の開発トレンドではPDOの使用が主流です。
セキュリティ機能の違い
PDOとmysqliは共に、プリペアドステートメントをサポートしていますが、実装方法に違いがあります。セキュリティ対策の観点では、PDOがより推奨されています。
セキュリティ機能の比較は、以下の通りです。
| 機能 | mysqli | PDO |
|---|---|---|
| プリペアドステートメント | 対応 | 対応 |
| 名前付きプレースホルダ | 非対応 | 対応 |
| 静的プレースホルダ | 手動設定が必要 | デフォルトで有効 |
PDOは名前付きプレースホルダ(:nameのような形式)をサポートしており、コードの可読性が高まります。mysqliは疑問符(?)のみをサポートしています。
SQLインジェクション対策として、どちらもプリペアドステートメントを使用することで安全性を確保できます。ただし、PDOの方がより直感的な記述が可能です。
記述方法の違い
mysqliとPDOでは、基本的な記述方法が異なります。PDOはオブジェクト指向のみですが、mysqliは手続き型とオブジェクト指向の両方をサポートしています。
接続コードの比較は、以下の通りです。
// mysqli(オブジェクト指向)
<?php
$mysqli = new mysqli('localhost', 'root', 'password', 'test');
if ($mysqli->connect_error) {
die('接続失敗: ' . $mysqli->connect_error);
}
?>
// PDO
<?php
try {
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', 'password');
} catch (PDOException $e) {
die('接続失敗: ' . $e->getMessage());
}
?>
PDOは例外処理を標準で使用するため、エラーハンドリングがより構造化されています。try-catch文を使用することで、エラー処理のコードが明確になります。
mysqliの手続き型は古いコードで見られますが、現在ではオブジェクト指向での記述が推奨されています。新規プロジェクトではPDOを採用することが一般的です。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
【初心者向け】データベースの基本的な作り方を簡単に解説
【WordPress】絞り込み検索機能を自作する方法をサンプルコードと併せて解説
【PHP】コードの動作確認をローカル・オンラインで行う方法
MacでWordPressのローカル環境を構築する方法を解説
PHPで日本語の曜日を表示する方法を簡単に解説
【Mac用】miテキストエディタのインストール方法や使い方を解説
Photoshopで文字入れする方法と入力テキストの編集方法
写真を切り抜いてコラージュを作る方法とおすすめアプリ・ツールを紹介
Yahoo APIの使い方やデータの取得方法を簡単に解説
ITやプログラミングに関するニュース
株式会社スーツがウェビナー開催、総務部門のプロジェクト管理による生産性向上を解説
一般社団法人ソフトウェア協会がAIビジネス活用セミナー第2弾を開催、各社のリアルな事例を紹介
社会構想大学院大学がリーダーシップセミナー開催、経済社会の未来像を構想
株式会社TMJとLINE WORKSが共催ウェビナー開催、AI活用で店舗の電話対応課題を解説
TAC株式会社が司法書士試験受験者向けウェビナーを開催、挫折しないための学習戦略を解説
株式会社Virtual Wallが不動産クラファン事業者向けウェビナー開催、脱・高利回り戦略を解説
株式会社ビーブレイクシステムズがMA-EYES解説ウェビナーを開催、30分で製品概要を紹介
東京都中小企業診断士協会とSENQが共催セミナー開催、承継型起業ETAの可能性を解説
清和ビジネスが共催セミナーを開催、エンゲージメント視点のオフィス移転・リニューアルを解説
abc株式会社が無料投資セミナーを開催、M&A経験17年の専務が直接指導




