0Pricing
PHP Academy · レッスン

PDOでMySQLに接続する

DSN、ユーザー名、パスワードを使ってPDO接続を作成します

「PDOでMySQLに接続する」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。

PDOとは

PDO(PHP Data Objects)は、データベースアクセスの抽象化レイヤーです。MySQL、PostgreSQL、SQLiteなどで同じAPIを使用でき、DSNを変更するだけで対応するデータベースを切り替えられます。

DSN

DSN(データソース名)文字列は、ドライバー、ホスト、ポート、データベース名を指定します。

<?php
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=myapp;charset=utf8mb4";

PDOインスタンスの作成

DSN、ユーザー名、パスワードをPDOコンストラクターに渡します。接続エラーを処理できるよう、try/catchで囲んでください。

<?php
try {
    $pdo = new PDO(
        "mysql:host=127.0.0.1;dbname=myapp;charset=utf8mb4",
        "db_user",
        "db_pass"
    );
} catch (PDOException $e) {
    die("Connection failed: ".$e->getMessage());
}

エラーモード

エラーを例外としてスローするようにエラーモードを設定し、エラーが決して黙って無視されないようにします。

<?php
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

デフォルトのフェッチモード

デフォルトのフェッチ形式を設定します。連想配列が最も扱いやすい形式です。

<?php
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

接続設定の完成形

ベストプラクティスは、すべての属性を設定してPDOを一度だけ作成し、そのインスタンスを共有することです。

<?php
function createPDO(): PDO {
    return new PDO(
        "mysql:host=127.0.0.1;dbname=myapp;charset=utf8mb4",
        "root", "secret",
        [
            PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES   => false,
        ]
    );
}

エミュレートプリペア

ATTR_EMULATE_PREPARESをfalseに設定すると、実際のサーバー側プリペアドステートメントを使用できます。より安全で効率的です。

charset=utf8mb4

DSNには必ずcharset=utf8mb4を指定してください。絵文字を含むUnicodeの全範囲をサポートできます。古いutf8エイリアスは使用しないでください。

単純なクエリの実行

query()は、ユーザー入力を含まないステートメントにのみ使用してください。

<?php
$stmt = $pdo->query("SELECT COUNT(*) as total FROM users");
$row  = $stmt->fetch();
echo $row["total"];

非SELECT処理にはexec()

exec()は結果を返さないステートメントを実行し、影響を受けた行数を返します。

<?php
$count = $pdo->exec("DELETE FROM sessions WHERE expires_at < NOW()");
echo "Deleted $count expired sessions";

永続的な接続

PDOではPDO::ATTR_PERSISTENT => trueによって永続的な接続を利用できます。ただし、PHP-FPM環境では通常、接続プールが推奨されます。

まとめ

DSNを指定してPDOを作成し、ERRMODE_EXCEPTIONとFETCH_ASSOCを設定して、エミュレートプリペアを無効にしてください。ユーザーから提供されたデータをquery()に渡してはいけません。必ずプリペアドステートメントを使用してください。

クイックチェック

PDOでエラー時に例外をスローさせる属性はどれですか。

よくある質問

「PDOでMySQLに接続する」レッスンは無料ですか?

はい。「PDOでMySQLに接続する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。

「PDOでMySQLに接続する」で何を学びますか?

DSN、ユーザー名、パスワードを使ってPDO接続を作成します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

PHP Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「PDOでMySQLに接続する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPHP Academyレッスンでコードを書いて実行できますか?

はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. PDOでMySQLに接続する
  2. プリペアドステートメントとバインド
  3. PDOで結果を取得する
  4. PDOによるトランザクション
← PHP Academyに戻る