PHPでMySQLに接続するには、主に mysqli 拡張または PDO を使う方法があります。以下はそれぞれの基本的な接続例です。
✅ 方法1:mysqli を使う場合(手軽で初心者向け)
<?php
$host = 'localhost';    // データベースサーバー
$user = 'username';     // ユーザー名
$pass = 'password';     // パスワード
$dbname = 'database';   // データベース名
$conn = new mysqli($host, $user, $pass, $dbname);
// 接続確認
if ($conn->connect_error) {
    die("接続失敗: " . $conn->connect_error);
}
echo "接続成功!";
?>
✅ 方法2:PDO を使う場合(より柔軟で安全)
<?php
$dsn = 'mysql:host=localhost;dbname=database;charset=utf8';
$user = 'username';
$pass = 'password';
try {
    $pdo = new PDO($dsn, $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "接続成功!";
} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage();
}
?>
🔐 補足
- username,- password,- databaseは自分の環境に合わせてください。
- セキュリティの観点からは PDO + プリペアドステートメント が推奨されます。
目次
PDO を使って MySQL に接続し、データを「取得・挿入・更新・削除」する
以下は、PDO を使って MySQL に接続し、データを「取得・挿入・更新・削除」する基本的な例です。
🔹1. データベースに接続
<?php
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$user = 'your_user';
$pass = 'your_password';
try {
    $pdo = new PDO($dsn, $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "接続成功!";
} catch (PDOException $e) {
    echo "接続失敗: " . $e->getMessage();
}
?>
🔹2. データを取得(SELECT)
<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE age > :age");
$stmt->execute(['age' => 20]);
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
    echo $row['name'] . "<br>";
}
?>
🔹3. データを挿入(INSERT)
<?php
$stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
$stmt->execute([
    'name' => '太郎',
    'age'  => 25
]);
?>
🔹4. データを更新(UPDATE)
<?php
$stmt = $pdo->prepare("UPDATE users SET age = :age WHERE name = :name");
$stmt->execute([
    'age'  => 30,
    'name' => '太郎'
]);
?>
🔹5. データを削除(DELETE)
<?php
$stmt = $pdo->prepare("DELETE FROM users WHERE name = :name");
$stmt->execute(['name' => '太郎']);
?>
このように PDO は安全な SQL 実行(プレースホルダ使用)とエラーハンドリングがしやすいのが特長です。
PDOを使ったCRUD(作成・読み取り・更新・削除)処理の完全サンプル
以下は、PDOを使ったCRUD(作成・読み取り・更新・削除)処理の完全サンプルです。データベース名は testdb、テーブル名は users を想定しています。
✅ 前提:テーブル構造
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100),
    age INT
);
✅ 1. 接続設定(db.php)
<?php
// db.php
$dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8';
$user = 'your_user';
$pass = 'your_password';
try {
    $pdo = new PDO($dsn, $user, $pass);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("接続失敗: " . $e->getMessage());
}
?>
✅ 2. データ作成(Create)
<?php
require 'db.php';
$name = '佐藤';
$age = 28;
$stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
$stmt->execute(['name' => $name, 'age' => $age]);
echo "ユーザーを追加しました。";
?>
✅ 3. データ取得(Read)
<?php
require 'db.php';
$stmt = $pdo->query("SELECT * FROM users");
foreach ($stmt as $row) {
    echo "ID: {$row['id']}、名前: {$row['name']}、年齢: {$row['age']}<br>";
}
?>
✅ 4. データ更新(Update)
<?php
require 'db.php';
$id = 1;
$newAge = 35;
$stmt = $pdo->prepare("UPDATE users SET age = :age WHERE id = :id");
$stmt->execute(['age' => $newAge, 'id' => $id]);
echo "ユーザーの年齢を更新しました。";
?>
✅ 5. データ削除(Delete)
<?php
require 'db.php';
$id = 1;
$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->execute(['id' => $id]);
echo "ユーザーを削除しました。";
?>
PDO + HTMLフォームで動作する完全なCRUDサンプル
以下は、前回のPDO + HTMLフォーム付きCRUDサンプルに Bootstrap 5 を適用したスタイリング済みバージョンです。見た目がぐっとモダンになります。
✅ スタイリングポイント
- table→- table table-striped
- form→- form-control,- btn btn-primary
- 全体レイアウト → container,card,mt-4, etc.
✅ 例:index.php(一覧 + 追加フォーム)
<?php
require 'db.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
    $stmt->execute([
        'name' => $_POST['name'],
        'age'  => $_POST['age']
    ]);
    header("Location: index.php");
    exit;
}
$users = $pdo->query("SELECT * FROM users")->fetchAll(PDO::FETCH_ASSOC);
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>ユーザー管理</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="bg-light">
<div class="container mt-4">
    <div class="card">
        <div class="card-header bg-primary text-white">
            <h3 class="mb-0">ユーザー一覧</h3>
        </div>
        <div class="card-body">
            <table class="table table-striped">
                <thead><tr><th>ID</th><th>名前</th><th>年齢</th><th>操作</th></tr></thead>
                <tbody>
                <?php foreach ($users as $user): ?>
                    <tr>
                        <td><?= htmlspecialchars($user['id']) ?></td>
                        <td><?= htmlspecialchars($user['name']) ?></td>
                        <td><?= htmlspecialchars($user['age']) ?></td>
                        <td>
                            <a class="btn btn-sm btn-outline-secondary" href="update.php?id=<?= $user['id'] ?>">編集</a>
                            <a class="btn btn-sm btn-outline-danger" href="delete.php?id=<?= $user['id'] ?>" onclick="return confirm('削除しますか?');">削除</a>
                        </td>
                    </tr>
                <?php endforeach; ?>
                </tbody>
            </table>
        </div>
    </div>
    <div class="card mt-4">
        <div class="card-header bg-success text-white">
            <h4 class="mb-0">ユーザー追加</h4>
        </div>
        <div class="card-body">
            <form method="post">
                <div class="mb-3">
                    <label class="form-label">名前</label>
                    <input type="text" name="name" class="form-control" required>
                </div>
                <div class="mb-3">
                    <label class="form-label">年齢</label>
                    <input type="number" name="age" class="form-control" required>
                </div>
                <button type="submit" class="btn btn-success">追加</button>
            </form>
        </div>
    </div>
</div>
</body>
</html>
Bootstrap 5 を用いた全体レイアウトテンプレート
以下は、Bootstrap 5 を用いた全体レイアウトテンプレートです。CRUDページ(index.php, update.php など)に共通のヘッダーとフッターを持たせて、見た目を統一します。
✅ ファイル構成(共通レイアウト化)
crud/ ├── db.php ├── header.php ← ヘッダー(共通) ├── footer.php ← フッター(共通) ├── index.php ├── update.php └── delete.php
① header.php(共通ヘッダー)
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>ユーザー管理システム</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body class="bg-light">
<nav class="navbar navbar-expand-lg navbar-dark bg-dark mb-4">
    <div class="container-fluid">
        <a class="navbar-brand" href="index.php">ユーザー管理</a>
    </div>
</nav>
<div class="container">
② footer.php(共通フッター)
</div> <!-- .container -->
<footer class="bg-dark text-white text-center mt-5 p-3">
    © <?= date('Y') ?> ユーザー管理システム
</footer>
</body>
</html>
③ index.php の例(共通レイアウトを使用)
<?php
require 'db.php';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $stmt = $pdo->prepare("INSERT INTO users (name, age) VALUES (:name, :age)");
    $stmt->execute([
        'name' => $_POST['name'],
        'age'  => $_POST['age']
    ]);
    header("Location: index.php");
    exit;
}
$users = $pdo->query("SELECT * FROM users")->fetchAll(PDO::FETCH_ASSOC);
include 'header.php';
?>
<div class="card mb-4">
    <div class="card-header bg-primary text-white">
        <h4 class="mb-0">ユーザー一覧</h4>
    </div>
    <div class="card-body">
        <table class="table table-bordered table-hover">
            <thead class="table-light"><tr><th>ID</th><th>名前</th><th>年齢</th><th>操作</th></tr></thead>
            <tbody>
            <?php foreach ($users as $user): ?>
                <tr>
                    <td><?= htmlspecialchars($user['id']) ?></td>
                    <td><?= htmlspecialchars($user['name']) ?></td>
                    <td><?= htmlspecialchars($user['age']) ?></td>
                    <td>
                        <a class="btn btn-sm btn-outline-primary" href="update.php?id=<?= $user['id'] ?>">編集</a>
                        <a class="btn btn-sm btn-outline-danger" href="delete.php?id=<?= $user['id'] ?>" onclick="return confirm('削除しますか?');">削除</a>
                    </td>
                </tr>
            <?php endforeach; ?>
            </tbody>
        </table>
    </div>
</div>
<div class="card">
    <div class="card-header bg-success text-white">
        <h4 class="mb-0">新規ユーザー追加</h4>
    </div>
    <div class="card-body">
        <form method="post">
            <div class="mb-3">
                <label class="form-label">名前</label>
                <input type="text" name="name" class="form-control" required>
            </div>
            <div class="mb-3">
                <label class="form-label">年齢</label>
                <input type="number" name="age" class="form-control" required>
            </div>
            <button type="submit" class="btn btn-success">追加</button>
        </form>
    </div>
</div>
<?php include 'footer.php'; ?>
このように分割することで、見た目の統一・保守性向上・コードの再利用性が大きく改善されます。
 
	
 
		 
			 
			 
			 
			 
			