PHP - PDOエクステンション:入門ガイド
こんにちは、志を抱くプログラマーさん!今日は、PHPとその強力なPDOエクステンションの世界に一緒に飛び込みます。これまでに一行のコードを書いたことがないとしても心配しないでください。あなたのフレンドリーなガイドとして、私はすべてをステップバイステップで解説します。コーヒーを一杯取り、さあ、潜りましょう!
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();
}
?>
これを分解すると:
- 接続情報(ホスト、データベース名、ユーザー名、パスワード)を定義します。
-
try-catch
ブロックを使って、潜在于いるエラーを処理します。 -
try
ブロック内で、接続情報を使って新しいPDOオブジェクトを作成します。 - エラーモードを例外を投げるように設定し、エラーのキャッチと処理をしやすくします。
- すべてが顺利にいけば「接続成功」と表示され、問題があればエラーメッセージが表示されます。
接続オプション
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