0Pricing
PHP Academy · 강의

준비된 문

준비된 문으로 데이터베이스 질의를 안전하게 만들어 보세요

준비된 문은(는) CoddyKit의 무료 PHP Academy 강의입니다. 이것은 6개 중 5번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 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/7 AI 튜터), CoddyKit PRO로 업그레이드하면 PHP Academy 강의 전체를 잠금 해제할 수 있습니다. PHP Academy 강의에는 총 6개의 강의가 포함되어 있습니다.

“준비된 문”에서 뭘 배우나요?

준비된 문으로 데이터베이스 질의를 안전하게 만들어 보세요 브라우저에서 직접 실행하는 실습 코드로 PHP Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

PHP Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 PHP Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 6개 중 5번째 강의입니다.

“준비된 문” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 PHP Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 PHP Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 데이터베이스 입문
  2. MySQL 데이터베이스에 연결하기
  3. 표 관리하기
  4. CRUD 연산 수행하기
  5. 준비된 문
  6. PDO 다루기
← PHP Academy(으)로 돌아가기