반응형

 

 PDO를 활용해서 DB를 설정한다. 여기선 PDO란??

 

더보기

PDO는 PHP Data Objects의 약자로, PHP에서 데이터베이스에 접근하기 위한 경량의 범용 인터페이스입니다

 

 PDO를 사용하면 다양한 데이터베이스 시스템에 대해 일관된 방법으로 접근할 수 있습니다. PDO는 특히 MySQL, PostgreSQL, SQLite, SQL Server 등 여러 데이터베이스를 지원하며, 데이터베이스 시스템을 변경하더라도 코드의 변경을 최소화할 수 있다는 장점이 있습니다.

 

■ 주요 기능

  1. 다양한 데이터베이스 지원:
    • PDO는 MySQL, PostgreSQL, SQLite, SQL Server, Oracle 등 여러 데이터베이스를 지원합니다.
  2. 안전한 SQL 쿼리 실행:
    • PDO는 SQL 인젝션 공격을 방지하기 위해 준비된 문장(prepared statements)와 바인딩 변수를 지원합니다.
  3. 일관된 인터페이스:
    • 다양한 데이터베이스에 대해 일관된 API를 제공합니다. 데이터베이스를 변경하더라도 코드의 변경을 최소화할 수 있습니다.
  4. 트랜잭션 지원:
    • PDO는 데이터베이스 트랜잭션을 쉽게 관리할 수 있는 메서드를 제공합니다.

 

STEP 1. db.php 파일을 만든다.

 

- db.php

<?php
$host = 'localhost';
$dbname = 'shop'; // database 이름
$username = 'root'; // database 유저 이름
$password = 'root'; // 패스워드 임력

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}
?>

 

 

STEP 2. require 키워드를 이용해서 'db.php' 파일을 필수적으로 포함하게 한다.

 

<?php
require 'db.php';

$product_id = isset($_GET['id']) ? (int)$_GET['id'] : 0;

if ($product_id > 0) {
    $stmt = $pdo->prepare('SELECT * FROM product WHERE product_id = ?');
    $stmt->execute([$product_id]);
    $product = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($product) {
        ?>

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" type="text/css" href="style.css">
    </head>
    <body>
        <div class="product-detail">
            <img src="data:image/jpeg;base64,<?php echo base64_encode($product['product_picture']); ?>" alt="<?php echo htmlspecialchars($product['product_name']); ?>">
            <h1><?php echo htmlspecialchars($product['product_name']); ?></h1>
            <p>카테고리: <?php echo htmlspecialchars($product['product_category']); ?></p>
            <p class="product-price">즉시구매가: $<?php echo htmlspecialchars($product['product_price']); ?></p>
            <p>경매 시작가: $<?php echo htmlspecialchars($product['product_auction_start_price']); ?></p>
            <p>등록일: <?php echo htmlspecialchars($product['product_date']); ?></p>
            <button class="back-button" onclick="location.href='product_view.php'">목록으로 돌아가기</button>
        </div>
    </body>
    </html>
    <?php
    } else {
        echo 'Product not found';
    }
} else {
    echo 'Invalid product ID';
}
?>

 

 

아래처럼 prepare로 SQL문을 준비를 하고, stmt->execute 문으로 실제 sql을 실행한다.

    $stmt = $pdo->prepare('SELECT * FROM product WHERE product_id = ?');
    $stmt->execute([$product_id]);
    $product = $stmt->fetch(PDO::FETCH_ASSOC);

 

 

 

반응형