カテゴリ: PHP 更新日: 2025/05/29

PHP の MySQL 接続の基本(mysqli, PDO)を完全解説!初心者向けガイド

PHP の MySQL 接続の基本(mysqli, PDO)
PHP の MySQL 接続の基本(mysqli, PDO)

新人と先輩の会話形式で理解しよう

新人

「PHPでMySQLに接続したいのですが、どのようにすればいいですか?」

先輩

「PHPでMySQLに接続するには、主に2つの方法があります。1つはmysqliを使う方法、もう1つはPDOを使う方法です。」

新人

mysqliPDOって、どう違うんですか?」

先輩

「どちらもMySQLに接続するための方法ですが、PDOの方がより汎用的でセキュリティが強化されています。詳しく見ていきましょう。」

-

1. MySQLとは?

1. MySQLとは?
1. MySQLとは?

MySQL(マイ・エスキューエル)は、世界中で広く使われているデータベース管理システム(DBMS)です。PHPと組み合わせることで、データの保存・取得・更新・削除を簡単に行うことができます。

例えば、Webサイトのユーザー情報やブログ記事のデータなどをMySQLに保存し、PHPでそれを操作することができます。

MySQLの特徴

  • 無料で利用できるオープンソースのデータベース。
  • 多くのWebアプリケーションで利用されている。
  • 高速なデータ処理が可能。

2. PHPでMySQLに接続する方法(mysqliとPDOの概要)

2. PHPでMySQLに接続する方法(mysqliとPDOの概要)
2. PHPでMySQLに接続する方法(mysqliとPDOの概要)

PHPでは、MySQLに接続するための方法としてmysqliPDOの2つがあります。

mysqliとは?

mysqli(MySQL Improved)は、MySQL専用の拡張機能で、PHPとMySQLを接続するために使用されます。

特徴:

  • MySQL専用なので、他のデータベースには対応していない。
  • 手軽に使えるが、セキュリティ対策を適切に行う必要がある。
  • オブジェクト指向と手続き型の両方の書き方ができる。

PDOとは?

PDO(PHP Data Objects)は、データベース接続のための抽象レイヤーで、MySQLだけでなく、他のデータベース(PostgreSQLやSQLiteなど)にも対応しています。

特徴:

  • 複数のデータベースに対応している。
  • セキュリティが強化されており、SQLインジェクション対策がしやすい。
  • オブジェクト指向の書き方ができ、コードの可読性が向上する。

mysqliとPDOの比較

特徴 mysqli PDO
対応データベース MySQLのみ MySQL、PostgreSQL、SQLiteなど多数
オブジェクト指向対応 ○(手続き型も可) ○(オブジェクト指向のみ)
セキュリティ 適切な対策が必要 SQLインジェクション対策がしやすい
可読性 やや低い 高い

3. mysqliを使ったMySQL接続の方法

3. mysqliを使ったMySQL接続の方法
3. mysqliを使ったMySQL接続の方法

mysqliを使うことで、PHPからMySQLに接続し、データベースを操作することができます。まずは、基本的な接続方法を見てみましょう。

mysqliを使った基本的な接続方法


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "sample_db";

// MySQLに接続
$conn = new mysqli($servername, $username, $password, $dbname);

// 接続を確認
if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}
echo "接続成功";
?>

このコードでは、new mysqli()を使ってMySQLに接続しています。接続が成功すると「接続成功」と表示されます。

データを取得する方法


<?php
$sql = "SELECT id, name FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while ($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"] . " - 名前: " . $row["name"] . "<br>";
    }
} else {
    echo "データがありません";
}
$conn->close();
?>

このコードは、SELECT文を使ってデータベースからデータを取得し、画面に表示する処理です。

4. PDOを使ったMySQL接続の方法

4. PDOを使ったMySQL接続の方法
4. PDOを使ったMySQL接続の方法

PDO(PHP Data Objects)は、複数のデータベースに対応した汎用的なデータベース接続方法です。MySQL以外のデータベースにも接続できるのが特徴です。

PDOを使った基本的な接続方法


<?php
$dsn = "mysql:host=localhost;dbname=sample_db;charset=utf8";
$username = "root";
$password = "";

try {
    $pdo = new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]);
    echo "接続成功";
} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage();
}
?>

このコードでは、new PDO()を使ってMySQLに接続し、エラーハンドリングを行っています。

データを取得する方法


<?php
$sql = "SELECT id, name FROM users";
$stmt = $pdo->query($sql);

foreach ($stmt as $row) {
    echo "ID: " . $row["id"] . " - 名前: " . $row["name"] . "<br>";
}
?>

このコードでは、query()メソッドを使ってデータを取得し、ループで表示しています。

-

5. mysqliとPDOの違い(どちらを選ぶべきか)

5. mysqliとPDOの違い(どちらを選ぶべきか)
5. mysqliとPDOの違い(どちらを選ぶべきか)

mysqliとPDOはどちらもMySQLに接続できますが、それぞれの特徴が異なります。

mysqliの特徴

  • MySQL専用で動作する。
  • 手続き型とオブジェクト指向の両方の書き方ができる。
  • 他のデータベースには対応していない。

PDOの特徴

  • MySQL以外にもPostgreSQLやSQLiteなどに対応している。
  • オブジェクト指向で統一された書き方ができる。
  • セキュリティ対策がしやすい(プリペアドステートメントの利用)。

どちらを選ぶべきか?

条件 mysqli PDO
MySQL専用で十分か △(他のDB対応不要なら不要)
他のデータベースにも接続したいか ×
セキュリティを重視したいか △(SQLインジェクション対策が必要) ○(プリペアドステートメントが標準対応)
オブジェクト指向で書きたいか

MySQLだけを扱うならmysqliでも問題ありませんが、セキュリティや汎用性を考えるとPDOの方が推奨されます。

6. MySQL接続時のエラーハンドリング(接続エラーの対処法)

6. MySQL接続時のエラーハンドリング(接続エラーの対処法)
6. MySQL接続時のエラーハンドリング(接続エラーの対処法)

MySQLに接続する際、正しく接続できない場合にエラーメッセージを適切に処理することが重要です。エラーハンドリングを適切に実装しないと、問題が発生したときに原因が分かりにくくなります。

mysqliでのエラーハンドリング


<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "sample_db";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}
echo "接続成功";
?>

$conn->connect_errorを使用することで、接続エラーが発生した場合にエラーメッセージを表示できます。

PDOでのエラーハンドリング


<?php
$dsn = "mysql:host=localhost;dbname=sample_db;charset=utf8";
$username = "root";
$password = "";

try {
    $pdo = new PDO($dsn, $username, $password, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]);
    echo "接続成功";
} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage();
}
?>

PDOでは、try-catch構文を使ってエラーをキャッチし、適切な処理を行うことができます。

7. 安全なデータ操作(SQLインジェクション対策)

7. 安全なデータ操作(SQLインジェクション対策)
7. 安全なデータ操作(SQLインジェクション対策)

SQLインジェクションとは、悪意のあるユーザーがデータベースを操作し、不正なデータを挿入したり、データを盗んだりする攻撃手法です。適切な対策をしないと、深刻なセキュリティ問題につながります。

SQLインジェクションの危険な例(mysqli)


<?php
$conn = new mysqli("localhost", "root", "", "sample_db");

$username = $_GET["username"];
$password = $_GET["password"];

$sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "ログイン成功";
} else {
    echo "ログイン失敗";
}
?>

上記のコードは、直接ユーザー入力をSQL文に埋め込んでいるため、SQLインジェクションのリスクがあります。

SQLインジェクションを防ぐ方法(mysqli)

プレースホルダーを使用することで、SQLインジェクションを防ぐことができます。


<?php
$conn = new mysqli("localhost", "root", "", "sample_db");

$username = $_GET["username"];
$password = $_GET["password"];

$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    echo "ログイン成功";
} else {
    echo "ログイン失敗";
}
?>

SQLインジェクションを防ぐ方法(PDO)


<?php
$pdo = new PDO("mysql:host=localhost;dbname=sample_db;charset=utf8", "root", "", [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

$username = $_GET["username"];
$password = $_GET["password"];

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->bindParam(":username", $username, PDO::PARAM_STR);
$stmt->bindParam(":password", $password, PDO::PARAM_STR);
$stmt->execute();

if ($stmt->rowCount() > 0) {
    echo "ログイン成功";
} else {
    echo "ログイン失敗";
}
?>

PDOでは、bindParam()を使うことで、SQLインジェクションのリスクを軽減できます。

8. まとめとおすすめの使い方

8. まとめとおすすめの使い方
8. まとめとおすすめの使い方

この記事では、PHPでMySQLに接続する方法として、mysqliPDOを紹介しました。それぞれのメリット・デメリットを理解し、適切に使い分けることが重要です。

mysqliを使うべきケース

  • MySQLのみを使用する場合。
  • シンプルなデータベース操作を行う場合。

PDOを使うべきケース

  • 複数のデータベースに対応させたい場合。
  • セキュリティを重視する場合(SQLインジェクション対策)。
  • オブジェクト指向のコードを利用したい場合。

おすすめの使い方

初心者のうちは、まずmysqliを使って基本的なデータベース接続を学び、その後PDOに移行するのが良いでしょう。特に、セキュリティを重視する場面ではPDOの使用が推奨されます。

また、データベースを扱う際は、必ずエラーハンドリングを実装し、SQLインジェクションの対策を忘れずに行いましょう。

コメント
コメント投稿は、ログインしてください

まだ口コミはありません。

カテゴリの一覧へ
新着記事
Pythonのエラーメッセージの読み方!よくあるエラーと解決方法
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
Pythonの条件式でNoneを判定する方法!is None vs == None の違い
Pythonのpass文とは?一時的なコードブロックをスキップする方法
人気記事
No.1
Java&Spring記事人気No1
PHPの配列をソートする方法!sort, rsort, asort, ksortの使い方を丁寧に解説します!
No.2
Java&Spring記事人気No2
PHPとは?初心者向けにわかりやすく解説
No.3
Java&Spring記事人気No3
PHPの関数(function)の基本を完全ガイド!初心者でもわかる使い方
No.4
Java&Spring記事人気No4
PHP の文字列の基本操作(連結・切り出し・長さ)の使い方
-