【PHP】PDOでMySQLに接続する方法を簡単に解説

【PHP】PDOでMySQLに接続する方法を簡単に解説

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座

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やプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する