PHP とデータベース連携 — 学習ページ
WordPress 投稿フォームに貼れるよう、基本的な HTML タグのみ使用しています。PHP コードは実行されませんので、学習用の資料としてご利用ください。
前提(環境)
- PHP 7.4 以上(推奨: PHP 8.x)
- MySQL / MariaDB
- XAMPP / MAMP などのローカル環境
データベース準備(SQL)
|
1 2 3 4 5 6 7 8 9 10 11 |
-- データベースとテーブル作成(例) CREATE DATABASE IF NOT EXISTS sample_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE sample_db; CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) NOT NULL UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; |
接続設定ファイル(db_config.php)
|
1 2 3 4 5 6 7 8 9 10 |
<?php // db_config.php return [ 'host' => 'localhost', 'dbname' => 'sample_db', 'user' => 'db_user', 'pass' => 'db_password', 'charset' => 'utf8mb4', ]; |
PDO を使った接続と CRUD
接続(connect_pdo.php)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php $config = require __DIR__ . '/db_config.php'; $dsn = sprintf( 'mysql:host=%s;dbname=%s;charset=%s', $config['host'], $config['dbname'], $config['charset'] ); try { $pdo = new PDO($dsn, $config['user'], $config['pass'], [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]); } catch (PDOException $e) { exit('データベース接続に失敗しました。'); } |
レコード作成(create_user.php)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php require __DIR__ . '/connect_pdo.php'; $name = '山田 太郎'; $email = 'taro@example.com'; $sql = 'INSERT INTO users (name, email) VALUES (:name, :email)'; $stmt = $pdo->prepare($sql); $stmt->execute([':name' => $name, ':email' => $email]); echo '追加しました。ID: ' . $pdo->lastInsertId(); |
レコード取得(list_users.php)
|
1 2 3 4 5 6 7 8 9 10 |
<?php require __DIR__ . '/connect_pdo.php'; $stmt = $pdo->query('SELECT id, name, email, created_at FROM users ORDER BY id DESC LIMIT 100'); $users = $stmt->fetchAll(); foreach ($users as $u) { echo htmlspecialchars($u['id']) . ' | ' . htmlspecialchars($u['name']) . ' | ' . htmlspecialchars($u['email']) . '<br>'; } |
更新(update_user.php)
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php require __DIR__ . '/connect_pdo.php'; $id = 1; $newName = '山田 花子'; $sql = 'UPDATE users SET name = :name WHERE id = :id'; $stmt = $pdo->prepare($sql); $stmt->execute([':name' => $newName, ':id' => $id]); echo '更新しました。'; |
削除(delete_user.php)
|
1 2 3 4 5 6 7 8 9 10 |
<?php require __DIR__ . '/connect_pdo.php'; $id = 1; $sql = 'DELETE FROM users WHERE id = :id'; $stmt = $pdo->prepare($sql); $stmt->execute([':id' => $id]); echo '削除しました。'; |
注意点
- 必ず prepared statements を利用する(SQLインジェクション対策)
- 本番環境ではエラーメッセージをブラウザに出さない
- 接続ID・パスワードは環境変数などで管理する
コメント