0Pricing
PHP Academy · レッスン

プリペアドステートメント

プリペアドステートメントでデータベースクエリを安全にします

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

プリペアドステートメントの概要

プリペアドステートメント

次のレッスンへようこそ!このレッスンでは、プリペアドステートメントと、それによってデータベースとのやり取りを安全かつ効率的に行う方法を学びます。さっそく始めましょう!

プリペアドステートメント — イラスト1

プリペアドステートメントとは何ですか?

プリペアドステートメントとは何ですか?

プリペアドステートメントは、SQLクエリを安全かつ効率的に実行できるデータベース管理システムの機能です。SQLコードとデータを分離することで、SQLインジェクション攻撃を防ぎます。

例: ユーザー入力をクエリに直接埋め込む代わりに、プレースホルダー(:name、:email)を使用します。

プリペアドステートメントを使用する理由

プリペアドステートメントを使用する理由

プリペアドステートメントには、次のようなメリットがあります。

  • セキュリティ: ユーザー入力をエスケープして、SQLインジェクションを防ぎます。
  • 効率性: 異なるデータで同じステートメントを再利用できるため、クエリの解析時間を短縮できます。
  • 保守性: コードが読みやすくなり、デバッグしやすくなります。

重要なポイント: ユーザーが提供したデータを扱うときは、必ずプリペアドステートメントを使用してください。

プリペアドステートメントの作成

プリペアドステートメントの作成

プリペアドステートメントを作成するには、次の手順に従ってください。

  1. プレースホルダーを含むSQLクエリを記述します。
  2. データベース接続を使用してクエリを準備します。
  3. プレースホルダーに値をバインドします。
  4. ステートメントを実行します。

例:

ヒント: 値を簡単にバインドするには、連想配列を使用してください。

<?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と集約を使った高度なクエリ技法について学びます。コーディングを続けましょう!

プリペアドステートメント — イラスト10

よくある質問

「プリペアドステートメント」レッスンは無料ですか?

はい。「プリペアドステートメント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと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フィードバックを取得できます。ローカル設定は不要です。

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

  1. データベース入門
  2. MySQLデータベースに接続する
  3. テーブルを管理する
  4. CRUD操作を実行する
  5. プリペアドステートメント
  6. PDOを扱う
← PHP Academyに戻る