PHP/Code snippet
[PHP] PHP DB설정하고 DB에서 데이터 가져오기
2024. 5. 25. 16:32반응형
PDO를 활용해서 DB를 설정한다. 여기선 PDO란??
더보기
PDO는 PHP Data Objects의 약자로, PHP에서 데이터베이스에 접근하기 위한 경량의 범용 인터페이스입니다
PDO를 사용하면 다양한 데이터베이스 시스템에 대해 일관된 방법으로 접근할 수 있습니다. PDO는 특히 MySQL, PostgreSQL, SQLite, SQL Server 등 여러 데이터베이스를 지원하며, 데이터베이스 시스템을 변경하더라도 코드의 변경을 최소화할 수 있다는 장점이 있습니다.
■ 주요 기능
- 다양한 데이터베이스 지원:
- PDO는 MySQL, PostgreSQL, SQLite, SQL Server, Oracle 등 여러 데이터베이스를 지원합니다.
- 안전한 SQL 쿼리 실행:
- PDO는 SQL 인젝션 공격을 방지하기 위해 준비된 문장(prepared statements)와 바인딩 변수를 지원합니다.
- 일관된 인터페이스:
- 다양한 데이터베이스에 대해 일관된 API를 제공합니다. 데이터베이스를 변경하더라도 코드의 변경을 최소화할 수 있습니다.
- 트랜잭션 지원:
- 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);
반응형