PHP MySQL Integration

11. PHP와 MySQL 연동 (PHP and MySQL Integration)

MySQLi 확장 (MySQLi Extension)

MySQLi는 MySQL 데이터베이스에 PHP에서 접근하기 위한 확장 라이브러리입니다. 객체지향적 방식과 절차적 방식 두 가지 방법을 지원합니다.

데이터베이스 연결 (Connecting to the Database)

MySQLi를 사용하여 MySQL 데이터베이스에 연결하는 방법입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mydatabase";
// MySQLi 객체 생성 및 연결
$conn = new mysqli($servername, $username, $password, $dbname);
// 연결 확인
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
} else {
echo "Connected successfully";
}
?>
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "mydatabase"; // MySQLi 객체 생성 및 연결 $conn = new mysqli($servername, $username, $password, $dbname); // 연결 확인 if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } else { echo "Connected successfully"; } ?>
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mydatabase";

// MySQLi 객체 생성 및 연결
$conn = new mysqli($servername, $username, $password, $dbname);

// 연결 확인
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} else {
    echo "Connected successfully";
}
?>
데이터 삽입, 조회, 수정, 삭제 (Inserting, Retrieving, Updating, and Deleting Data)

MySQLi를 사용하여 데이터를 삽입, 조회, 수정, 삭제하는 방법입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// 데이터 삽입 (INSERT)
$sql = "INSERT INTO users (username, password, email)
VALUES ('john_doe', 'password123', 'john.doe@example.com')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
// 데이터 조회 (SELECT)
$sql = "SELECT id, username, email FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - Name: " . $row["username"]. " - Email: " . $row["email"]. "<br>";
}
} else {
echo "0 results";
}
// 데이터 수정 (UPDATE)
$sql = "UPDATE users SET email='new_email@example.com' WHERE username='john_doe'";
if ($conn->query($sql) === TRUE) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->error;
}
// 데이터 삭제 (DELETE)
$sql = "DELETE FROM users WHERE id=1";
if ($conn->query($sql) === TRUE) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " . $conn->error;
}
?>
<?php // 데이터 삽입 (INSERT) $sql = "INSERT INTO users (username, password, email) VALUES ('john_doe', 'password123', 'john.doe@example.com')"; if ($conn->query($sql) === TRUE) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . $conn->error; } // 데이터 조회 (SELECT) $sql = "SELECT id, username, email FROM users"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "ID: " . $row["id"]. " - Name: " . $row["username"]. " - Email: " . $row["email"]. "<br>"; } } else { echo "0 results"; } // 데이터 수정 (UPDATE) $sql = "UPDATE users SET email='new_email@example.com' WHERE username='john_doe'"; if ($conn->query($sql) === TRUE) { echo "Record updated successfully"; } else { echo "Error updating record: " . $conn->error; } // 데이터 삭제 (DELETE) $sql = "DELETE FROM users WHERE id=1"; if ($conn->query($sql) === TRUE) { echo "Record deleted successfully"; } else { echo "Error deleting record: " . $conn->error; } ?>
<?php
// 데이터 삽입 (INSERT)
$sql = "INSERT INTO users (username, password, email)
        VALUES ('john_doe', 'password123', 'john.doe@example.com')";
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

// 데이터 조회 (SELECT)
$sql = "SELECT id, username, email FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - Name: " . $row["username"]. " - Email: " . $row["email"]. "<br>";
    }
} else {
    echo "0 results";
}

// 데이터 수정 (UPDATE)
$sql = "UPDATE users SET email='new_email@example.com' WHERE username='john_doe'";
if ($conn->query($sql) === TRUE) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . $conn->error;
}

// 데이터 삭제 (DELETE)
$sql = "DELETE FROM users WHERE id=1";
if ($conn->query($sql) === TRUE) {
    echo "Record deleted successfully";
} else {
    echo "Error deleting record: " . $conn->error;
}
?>

PDO (PHP Data Objects)

PDO는 PHP에서 여러 종류의 데이터베이스에 접근할 수 있는 유연하고 효율적인 인터페이스를 제공하는 데이터베이스 추상화 계층입니다.

데이터베이스 연결 (Connecting to the Database)

PDO를 사용하여 MySQL 데이터베이스에 연결하는 방법입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mydatabase";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "Connected successfully";
} catch(PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
?>
<?php $servername = "localhost"; $username = "username"; $password = "password"; $dbname = "mydatabase"; try { $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connected successfully"; } catch(PDOException $e) { echo "Connection failed: " . $e->getMessage(); } ?>
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "mydatabase";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
?>
데이터 삽입, 조회, 수정, 삭제 (Inserting, Retrieving, Updating, and Deleting Data)

PDO를 사용하여 데이터를 삽입, 조회, 수정, 삭제하는 방법입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
// 데이터 삽입 (INSERT)
$sql = "INSERT INTO users (username, password, email)
VALUES ('john_doe', 'password123', 'john.doe@example.com')";
if ($conn->exec($sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->errorInfo();
}
// 데이터 조회 (SELECT)
$sql = "SELECT id, username, email FROM users";
$stmt = $conn->query($sql);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "ID: " . $row["id"]. " - Name: " . $row["username"]. " - Email: " . $row["email"]. "<br>";
}
// 데이터 수정 (UPDATE)
$sql = "UPDATE users SET email='new_email@example.com' WHERE username='john_doe'";
if ($conn->exec($sql)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . $conn->errorInfo();
}
// 데이터 삭제 (DELETE)
$sql = "DELETE FROM users WHERE id=1";
if ($conn->exec($sql)) {
echo "Record deleted successfully";
} else {
echo "Error deleting record: " . $conn->errorInfo();
}
?>
<?php // 데이터 삽입 (INSERT) $sql = "INSERT INTO users (username, password, email) VALUES ('john_doe', 'password123', 'john.doe@example.com')"; if ($conn->exec($sql)) { echo "New record created successfully"; } else { echo "Error: " . $sql . "<br>" . $conn->errorInfo(); } // 데이터 조회 (SELECT) $sql = "SELECT id, username, email FROM users"; $stmt = $conn->query($sql); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "ID: " . $row["id"]. " - Name: " . $row["username"]. " - Email: " . $row["email"]. "<br>"; } // 데이터 수정 (UPDATE) $sql = "UPDATE users SET email='new_email@example.com' WHERE username='john_doe'"; if ($conn->exec($sql)) { echo "Record updated successfully"; } else { echo "Error updating record: " . $conn->errorInfo(); } // 데이터 삭제 (DELETE) $sql = "DELETE FROM users WHERE id=1"; if ($conn->exec($sql)) { echo "Record deleted successfully"; } else { echo "Error deleting record: " . $conn->errorInfo(); } ?>
<?php
// 데이터 삽입 (INSERT)
$sql = "INSERT INTO users (username, password, email)
        VALUES ('john_doe', 'password123', 'john.doe@example.com')";
if ($conn->exec($sql)) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->errorInfo();
}

// 데이터 조회 (SELECT)
$sql = "SELECT id, username, email FROM users";
$stmt = $conn->query($sql);

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "ID: " . $row["id"]. " - Name: " . $row["username"]. " - Email: " . $row["email"]. "<br>";
}

// 데이터 수정 (UPDATE)
$sql = "UPDATE users SET email='new_email@example.com' WHERE username='john_doe'";
if ($conn->exec($sql)) {
    echo "Record updated successfully";
} else {
    echo "Error updating record: " . $conn->errorInfo();
}

// 데이터 삭제 (DELETE)
$sql = "DELETE FROM users WHERE id=1";
if ($conn->exec($sql)) {
    echo "Record deleted successfully";
} else {
    echo "Error deleting record: " . $conn->errorInfo();
}
?>

트랜잭션 (Transactions)

트랜잭션을 사용하여 데이터베이스 작업을 그룹화하고, 롤백이나 커밋을 사용하여 데이터 일관성을 유지할 수 있습니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
try {
$conn->beginTransaction();
// 여러 SQL 문 실행
$conn->exec("INSERT INTO users (username, password) VALUES ('john_doe', 'password123')");
$conn->exec("UPDATE users SET email='new_email@example.com' WHERE username='john_doe'");
$conn->commit(); // 모든 SQL 문이 성공적으로 실행되면 커밋
echo "Transaction committed successfully";
} catch(PDOException $e) {
$conn->rollBack(); // 오류 발생 시 롤백
echo "Transaction failed: " . $e->getMessage();
}
?>
<?php try { $conn->beginTransaction(); // 여러 SQL 문 실행 $conn->exec("INSERT INTO users (username, password) VALUES ('john_doe', 'password123')"); $conn->exec("UPDATE users SET email='new_email@example.com' WHERE username='john_doe'"); $conn->commit(); // 모든 SQL 문이 성공적으로 실행되면 커밋 echo "Transaction committed successfully"; } catch(PDOException $e) { $conn->rollBack(); // 오류 발생 시 롤백 echo "Transaction failed: " . $e->getMessage(); } ?>
<?php
try {
    $conn->beginTransaction();

    // 여러 SQL 문 실행
    $conn->exec("INSERT INTO users (username, password) VALUES ('john_doe', 'password123')");
    $conn->exec("UPDATE users SET email='new_email@example.com' WHERE username='john_doe'");

    $conn->commit(); // 모든 SQL 문이 성공적으로 실행되면 커밋
    echo "Transaction committed successfully";
} catch(PDOException $e) {
    $conn->rollBack(); // 오류 발생 시 롤백
    echo "Transaction failed: " . $e->getMessage();
}
?>

준비된 쿼리 (Prepared Statements)

준비된 쿼리를 사용하여 SQL 쿼리에 대한 입력 값을 안전하게 처리할 수 있습니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
$username = "john_doe";
$password = "password123";
$stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
echo "Username: " . $row["username"] . "<br>";
}
?>
<?php $username = "john_doe"; $password = "password123"; $stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($result as $row) { echo "Username: " . $row["username"] . "<br>"; } ?>
<?php
$username = "john_doe";
$password = "password123";

$stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);

$stmt->execute();

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
    echo "Username: " . $row["username"] . "<br>";
}
?>

데이터베이스 보안 (SQL Injection Prevention)

SQL 삽입 공격을 방지하기 위해 준비된 쿼리나 PDO의 매개변수화된 쿼리를 사용하여 사용자 입력을 안전하게 처리해야 합니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
echo "Username: " . $row["username"] . "<br>";
}
?>
<?php $username = $_POST['username']; $password = $_POST['password']; $stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password"); $stmt->bindParam(':username', $username); $stmt->bindParam(':password', $password); $stmt->execute(); $result = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($result as $row) { echo "Username: " . $row["username"] . "<br>"; } ?>
<?php
$username = $_POST['username'];
$password = $_POST['password'];

$stmt = $conn->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);

$stmt->execute();

$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($result as $row) {
    echo "Username: " . $row["username"] . "<br>";
}
?>

위의 코드 예제들은 MySQL 데이터베이스와 PHP를 연동하여 데이터를 다루는 기본적인 방법들을 보여줍니다. MySQLi와 PDO는 각각의 장단점을 가지고 있으며, 프로젝트 요구 사항에 맞게 적절히 선택하여 사용하는 것이 중요합니다.

Leave a Reply

Your email address will not be published. Required fields are marked *