PHP - PDOエクステンション:入門ガイド

こんにちは、志を抱くプログラマーさん!今日は、PHPとその強力なPDOエクステンションの世界に一緒に飛び込みます。これまでに一行のコードを書いたことがないとしても心配しないでください。あなたのフレンドリーなガイドとして、私はすべてをステップバイステップで解説します。コーヒーを一杯取り、さあ、潜りましょう!

PHP - PDO Extension

PDOとは?

PDOはPHP Data Objectsの略です。これは、PHPが異なるタイプのデータベースとコミュニケーションを取るためのユニバーサルトランスレーターのようです。あなたが異なる国の人々とコミュニケーションを取ろうとしていると想像してください。PDOは、すべての人々と話すことができる多言語の友達です!

PDOを使う理由は?

「PDOなんてどうして気にする必要があるの?」と疑問に思うかもしれません。私がPHPを教え始めた頃、データベースごとに異なるメソッドを使っていました。データベースを切り替えるたびに新しい言語を学ぶようなものです。PDOがそれを変えました。PDOはデータベースとの対話を一貫した方法で提供し、開発者の生活をずっと楽にしてくれます。

さあ、コードを少し手を汚しましょう!

PDO接続

接続の確立

PDOを使い始めるためには、まずデータベースに接続する必要があります。以下のようにします:

<?php
$host = 'localhost';
$dbname = 'my_database';
$username = 'root';
$password = 'password';

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

これを分解すると:

  1. 接続情報(ホスト、データベース名、ユーザー名、パスワード)を定義します。
  2. try-catchブロックを使って、潜在于いるエラーを処理します。
  3. tryブロック内で、接続情報を使って新しいPDOオブジェクトを作成します。
  4. エラーモードを例外を投げるように設定し、エラーのキャッチと処理をしやすくします。
  5. すべてが顺利にいけば「接続成功」と表示され、問題があればエラーメッセージが表示されます。

接続オプション

PDOは接続時に色々なオプションを設定することができます。以下はその例です:

<?php
$options = [
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];

$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password, $options);
?>

これらのオプションは、デフォルトの取得モードを連想配列に設定し、エミュレートされたプレースメントステートメントを無効にします。これが現在よくわからなくても、後で詳しく説明します!

PDOクラスメソッド

接続が完了したので、最も一般的に使うPDOメソッドを見てみましょう。

クエリの実行

query()メソッド

query()メソッドは、シンプルなSQLクエリを実行するために使われます:

<?php
$stmt = $pdo->query("SELECT * FROM users");
while ($row = $stmt->fetch()) {
echo $row['name'] . "\n";
}
?>

このコードは、'users'テーブルからすべてのユーザーを取得し、その名前を表示します。PDOに「図書館(データベース)に行って、ユーザーの本を見つけて、すべての名前を読んでください」と依頼するようなものです。

exec()メソッド

exec()メソッドは、結果セットを返さないSQLステートメントを実行するために使われます:

<?php
$count = $pdo->exec("DELETE FROM users WHERE active = 0");
echo "$count個の非アクティブユーザーが削除されました。";
?>

このコードは、非アクティブなユーザーを削除し、削除されたユーザーの数を表示します。PDOに「ユーザーリストを整理して、非アクティブな人を削除してください」と依頼するようなものです。

プレースメントステートメント

プレースメントステートメントは、特にユーザー入力を扱うときに安全な方法でクエリを実行するためのもので、SQLインジェクション攻撃を防ぐのに役立ちます。

<?php
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute(['name' => 'John Doe', 'email' => '[email protected]']);
?>

これは、PDOに「フォームを用意して、空白のところ(:name:email)を実際の値で埋めてください」と依頼するようなものです。

結果の取得

PDOはいくつかの方法で結果を取得することができます:

<?php
$stmt = $pdo->query("SELECT * FROM users");

// 連想配列として取得
$user = $stmt->fetch(PDO::FETCH_ASSOC);

// オブジェクトとして取得
$user = $stmt->fetch(PDO::FETCH_OBJ);

// すべての結果を取得
$users = $stmt->fetchAll();
?>

これらは、PDOがあなたに提供したデータをパッケージ化する異なる方法です。リストとして(配列)、構造化されたパッケージとして(オブジェクト)、またはすべてを一度に取得することができます。

トランザクション管理

トランザクションは、複数の操作を一つの作業単位として実行するために使われます:

<?php
try {
$pdo->beginTransaction();
$pdo->exec("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
$pdo->exec("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
$pdo->commit();
} catch (Exception $e) {
$pdo->rollBack();
echo "失敗: " . $e->getMessage();
}
?>

これは、PDOに「重要なことを行うので、全部が成功するか全部が行わないようにしてください」と依頼するようなものです。データの整合性を確保する必要がある操作に非常に役立ちます。

PDOメソッド一覧

ここに、私たちが議論した主要なPDOメソッドのまとめを示します:

メソッド 説明
query() SQLクエリを実行 $stmt = $pdo->query("SELECT * FROM users");
exec() SQLステートメントを実行し、影響を受けた行数を返す $count = $pdo->exec("DELETE FROM users WHERE active = 0");
prepare() ステートメントを準備 $stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
execute() 準備されたステートメントを実行 $stmt->execute(['name' => 'John', 'email' => '[email protected]']);
fetch() 結果セットの次の行を取得 $row = $stmt->fetch(PDO::FETCH_ASSOC);
fetchAll() 結果セットのすべての行を取得 $rows = $stmt->fetchAll();
beginTransaction() トランザクションを開始 $pdo->beginTransaction();
commit() トランザクションをコミット $pdo->commit();
rollBack() トランザクションをロールバック $pdo->rollBack();

そして、ここまで!私たちはPHPのPDOエクステンションの基本をカバーしました。新しいスキルを学ぶことは練習が必要です。すぐにすべてが理解できるわけではありません。実験を続け、すぐにデータベースを操作するプロになるでしょう!

未来のデータベース魔术師さん、快適なコーディングを!

Credits: Image by storyset