プリペアドステートメント
プリペアドステートメントでデータベースクエリを安全にします
「プリペアドステートメント」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン5/6です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全6レッスンが含まれています。
プリペアドステートメントの概要
プリペアドステートメント
次のレッスンへようこそ!このレッスンでは、プリペアドステートメントと、それによってデータベースとのやり取りを安全かつ効率的に行う方法を学びます。さっそく始めましょう!

プリペアドステートメントとは何ですか?
プリペアドステートメントとは何ですか?
プリペアドステートメントは、SQLクエリを安全かつ効率的に実行できるデータベース管理システムの機能です。SQLコードとデータを分離することで、SQLインジェクション攻撃を防ぎます。
例: ユーザー入力をクエリに直接埋め込む代わりに、プレースホルダー(:name、:email)を使用します。
プリペアドステートメントを使用する理由
プリペアドステートメントを使用する理由
プリペアドステートメントには、次のようなメリットがあります。
- セキュリティ: ユーザー入力をエスケープして、SQLインジェクションを防ぎます。
- 効率性: 異なるデータで同じステートメントを再利用できるため、クエリの解析時間を短縮できます。
- 保守性: コードが読みやすくなり、デバッグしやすくなります。
重要なポイント: ユーザーが提供したデータを扱うときは、必ずプリペアドステートメントを使用してください。
プリペアドステートメントの作成
プリペアドステートメントの作成
プリペアドステートメントを作成するには、次の手順に従ってください。
- プレースホルダーを含むSQLクエリを記述します。
- データベース接続を使用してクエリを準備します。
- プレースホルダーに値をバインドします。
- ステートメントを実行します。
例:
ヒント: 値を簡単にバインドするには、連想配列を使用してください。
<?php
$sql = "INSERT INTO users (name, email) VALUES (:name, :email)";
$stmt = $pdo->prepare($sql);
$stmt->execute(["name" => "Alice", "email" => "alice@mail.com"]);
?>値のバインド
値のバインド
bindParam()またはbindValue()メソッドを使用して、プレースホルダーに値をバインドします。例:
<?php
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->bindParam(":name", $name);
$stmt->bindParam(":email", $email);
$name = "Bob";
$email = "bob@mail.com";
$stmt->execute();
?>
SELECTクエリでプリペアドステートメントを使用する
SELECTクエリでプリペアドステートメントを使用する
プリペアドステートメントは、SELECTを含むすべての種類のSQLクエリで使用できます。例:
ヒント: 複数の行を取得するには、fetchAll()を使用してください。
<?php
$sql = "SELECT * FROM users WHERE name = :name";
$stmt = $pdo->prepare($sql);
$stmt->execute(["name" => "Alice"]);
$result = $stmt->fetch(PDO::FETCH_ASSOC);
echo "Name: " . $result["name"] . ", Email: " . $result["email"];
?>
プリペアドステートメントの再利用
プリペアドステートメントの再利用
プリペアドステートメントは異なる値で再利用できるため、効率が向上します。例:
<?php
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$users = [
["name" => "Charlie", "email" => "charlie@mail.com"],
["name" => "Dave", "email" => "dave@mail.com"]
];
foreach ($users as $user) {
$stmt->execute($user);
}
echo "Multiple records inserted successfully!";
?>
SQLインジェクションの防止
SQLインジェクションの防止
プリペアドステートメントはユーザー入力に含まれる特殊文字をエスケープし、SQLインジェクション攻撃を防ぎます。例:
<?php
$sql = "SELECT * FROM users WHERE email = :email";
$stmt = $pdo->prepare($sql);
$stmt->execute(["email" => "' OR 1=1; --"]);
$result = $stmt->fetch();
if ($result) {
echo "User found.";
} else {
echo "No user found.";
}
?>
よくできました!
よくできました!
おめでとうございます!PHPでプリペアドステートメントを使用して、データベースとのやり取りを安全に行う方法を学びました。次のレッスンでは、JOINと集約を使った高度なクエリ技法について学びます。コーディングを続けましょう!

よくある質問
「プリペアドステートメント」レッスンは無料ですか?
はい。「プリペアドステートメント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全6レッスンが含まれています。
「プリペアドステートメント」で何を学びますか?
プリペアドステートメントでデータベースクエリを安全にします ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン5/6です。
「プリペアドステートメント」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。