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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- PDOでMySQLに接続する
- プリペアドステートメントとバインド
- PDOで結果を取得する
- PDOによるトランザクション