PHP MySQL Insert Data
PHP MySQL Insert Data : 데이터베이스에 데이터 삽입하기
PHP를 사용하여 MySQL 데이터베이스에 **데이터를 삽입(Insert Data)**할 수 있습니다. 이는 웹 애플리케이션에서 사용자가 입력한 데이터를 저장하거나, 백엔드에서 동적으로 생성된 데이터를 데이터베이스에 저장하는 데 필수적인 작업입니다. PHP에서 MySQL에 데이터를 삽입하는 데는 MySQLi와 PDO 두 가지 방법이 있습니다.
이 가이드에서는 PHP를 사용해 MySQL에 데이터를 삽입하는 방법, MySQLi와 PDO를 활용한 데이터 삽입 예제, 그리고 보안적인 고려 사항을 다룹니다.
1. MySQL 데이터 삽입(SQL 쿼리)
MySQL에 데이터를 삽입하기 위한 기본적인 SQL 쿼리는 다음과 같습니다:
INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);
table_name
: 데이터를 삽입할 테이블 이름입니다.column1
,column2
: 각 열의 이름입니다.value1
,value2
: 삽입할 값입니다.
예시: 사용자 정보를 저장할 users 테이블에 데이터를 삽입
INSERT INTO users (username, email) VALUES ('JohnDoe', 'john@example.com');
2. MySQLi를 사용한 데이터 삽입
2.1 객체 지향 방식으로 데이터 삽입
<?php
// MySQL 데이터베이스 연결 정보
$host = "localhost";
$username = "root";
$password = "";
$database = "my_database";
// MySQL 데이터베이스 연결
$conn = new mysqli($host, $username, $password, $database);
// 연결 확인
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// 데이터 삽입 SQL 쿼리
$sql = "INSERT INTO users (username, email) VALUES ('JohnDoe', 'john@example.com')";
// 데이터 삽입 시도
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
// 연결 종료
$conn->close();
?>
설명:
$conn->query()
: SQL 쿼리를 실행하여 데이터를 삽입합니다.$conn->close()
: 작업 후 데이터베이스 연결을 종료합니다.
2.2 절차적 방식으로 데이터 삽입
<?php
// MySQL 데이터베이스 연결 정보
$host = "localhost";
$username = "root";
$password = "";
$database = "my_database";
// MySQL 데이터베이스 연결
$conn = mysqli_connect($host, $username, $password, $database);
// 연결 확인
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// 데이터 삽입 SQL 쿼리
$sql = "INSERT INTO users (username, email) VALUES ('JaneDoe', 'jane@example.com')";
// 데이터 삽입 시도
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
// 연결 종료
mysqli_close($conn);
?>
설명:
mysqli_connect()
: MySQL 데이터베이스에 연결합니다.mysqli_query()
: SQL 쿼리를 실행하여 데이터를 삽입합니다.
3. PDO를 사용한 데이터 삽입
PDO는 여러 데이터베이스 시스템을 지원하는 범용적인 데이터베이스 연결 인터페이스입니다. 이 방법을 사용하면 파라미터화된 쿼리로 SQL 인젝션을 방지할 수 있습니다.
<?php
// 데이터베이스 연결 정보
$host = "localhost";
$dbname = "my_database";
$username = "root";
$password = "";
try {
// PDO 객체 생성 및 MySQL 서버 연결
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 데이터 삽입 SQL 쿼리 (파라미터화된 쿼리 사용)
$sql = "INSERT INTO users (username, email) VALUES (:username, :email)";
// SQL 쿼리 준비
$stmt = $pdo->prepare($sql);
// 파라미터 바인딩 및 실행
$stmt->execute(['username' => 'JaneDoe', 'email' => 'jane@example.com']);
echo "New record created successfully";
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
설명:
prepare()
: SQL 쿼리를 준비합니다.execute()
: 파라미터 바인딩을 통해 쿼리를 실행하여 SQL 인젝션을 방지합니다.try-catch
: 데이터 삽입 중 발생한 오류를 처리합니다.
4. 사용자 입력을 통한 데이터 삽입
사용자 입력을 통해 데이터를 안전하게 삽입하려면 SQL 인젝션을 방지해야 합니다. 이를 위해 파라미터화된 쿼리를 사용하는 것이 좋습니다.
4.1 MySQLi를 통한 사용자 입력 데이터 삽입
<?php
// MySQL 데이터베이스 연결 정보
$host = "localhost";
$username = "root";
$password = "";
$database = "my_database";
// MySQL 데이터베이스 연결
$conn = new mysqli($host, $username, $password, $database);
// 연결 확인
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// 사용자 입력을 통한 데이터 삽입 (파라미터화된 쿼리)
$stmt = $conn->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email);
// 사용자 입력 값
$username = $_POST['username'];
$email = $_POST['email'];
// 쿼리 실행
$stmt->execute();
echo "New record created successfully";
$stmt->close();
$conn->close();
?>
설명:
$stmt->bind_param()
: 파라미터 바인딩을 통해 사용자 입력값을 안전하게 처리합니다.ss
: 두 개의 문자열 값(username
과email
)을 의미합니다.
4.2 PDO를 통한 사용자 입력 데이터 삽입
<?php
// 데이터베이스 연결 정보
$host = "localhost";
$dbname = "my_database";
$username = "root";
$password = "";
try {
// PDO 객체 생성 및 MySQL 서버 연결
$pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 사용자 입력을 통한 데이터 삽입 (파라미터화된 쿼리)
$sql = "INSERT INTO users (username, email) VALUES (:username, :email)";
$stmt = $pdo->prepare($sql);
// 사용자 입력 값
$stmt->execute(['username' => $_POST['username'], 'email' => $_POST['email']]);
echo "New record created successfully";
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
?>
설명:
- 파라미터화된 쿼리를 사용하여 SQL 인젝션 방지와 보안 강화를 구현합니다.
5. 보안 고려 사항
5.1 SQL 인젝션 방지
SQL 인젝션은 사용자가 입력한 값이 쿼리에 직접 포함될 때 발생하는 심각한 보안 문제입니다. 이를 방지하기 위해 항상 파라미터화된 쿼리를 사용하여 데이터를 처리해야 합니다.
MySQLi에서 SQL 인젝션 방지:
$stmt = $conn->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email);
PDO에서 SQL 인젝션 방지:
$stmt = $pdo->prepare("INSERT INTO users (username, email) VALUES (:username, :email)");
$stmt->execute(['username' => $username, 'email' => $email]);
5.2 사용자 입력 유효성 검사
사용자가 입력한 값에 대해 유효성 검사를 수행하는 것이 중요합니다. 특히 이메일 주소나 문자열 길이 제한 같은 제약을 추가하는 것이 좋습니다.
if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
// 유효한 이메일일 경우 데이터 삽입
}
요약
PHP를 사용하여 **MySQL 데이터베이스에 데이터를 삽입
- *하기 위해 MySQLi와 PDO를 사용할 수 있습니다. MySQLi는 MySQL 전용이며, 객체 지향 방식과 절차적 방식으로 사용할 수 있습니다. PDO는 여러 데이터베이스를 지원하는 범용 인터페이스로, 파라미터화된 쿼리를 통해 SQL 인젝션 방지를 구현할 수 있습니다. 사용자 입력값을 안전하게 처리하고 삽입할 때는 항상 파라미터 바인딩을 통해 보안을 강화하는 것이 중요합니다.