PHP MySQL Create Table
PHP MySQL Create Table : 데이터베이스 테이블 생성하기
PHP를 사용하여 MySQL 데이터베이스에 **테이블을 생성(Create Table)**할 수 있습니다. 이를 통해 데이터베이스에서 데이터를 저장, 관리할 수 있는 구조적 공간을 만들 수 있습니다. PHP에서 MySQL과 연결하여 테이블을 생성하는 데는 MySQLi 또는 PDO 라이브러리를 사용할 수 있습니다.
이 가이드에서는 PHP를 사용해 MySQL 데이터베이스에 테이블을 생성하는 방법, MySQLi와 PDO를 활용한 테이블 생성 예제, 그리고 각종 보안 고려 사항을 다룹니다.
1. MySQL 테이블 생성(SQL 쿼리)
MySQL에서 테이블을 생성하기 위한 SQL 쿼리는 다음과 같은 구조를 가집니다:
CREATE TABLE table_name (
column1 datatype constraints,
column2 datatype constraints,
column3 datatype constraints
);
table_name
: 생성할 테이블의 이름입니다.column1
,column2
: 각 열의 이름과 데이터 타입(예:VARCHAR
,INT
,DATE
)을 지정합니다.constraints
: 열에 추가할 제약 조건(예:PRIMARY KEY
,NOT NULL
)입니다.
예시: 사용자 정보를 저장할 users 테이블 생성
CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
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 = "CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
// 테이블 생성 시도
if ($conn->query($sql) === TRUE) {
echo "Table users created successfully";
} else {
echo "Error creating table: " . $conn->error;
}
// 연결 종료
$conn->close();
?>
설명:
new mysqli()
: MySQLi 객체를 사용하여 데이터베이스에 연결합니다.$conn->query()
: SQL 쿼리를 실행하여 테이블을 생성합니다.id
,username
,email
,reg_date
: 사용자 정보를 저장할 열들을 정의하고,id
열은 기본 키(PRIMARY KEY
)로 설정했습니다.
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 = "CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
// 테이블 생성 시도
if (mysqli_query($conn, $sql)) {
echo "Table users created successfully";
} else {
echo "Error creating table: " . mysqli_error($conn);
}
// 연결 종료
mysqli_close($conn);
?>
설명:
mysqli_connect()
: 절차적 방식으로 MySQL에 연결합니다.mysqli_query()
: SQL 쿼리를 실행하여 테이블을 생성합니다.- 연결 및 테이블 생성 후 연결을 닫는 방식은 객체 지향 방식과 동일합니다.
3. PDO를 사용한 테이블 생성
PDO는 여러 데이터베이스 시스템을 지원하는 범용적인 데이터베이스 연결 인터페이스입니다. 이를 사용하면 MySQL 데이터베이스에 테이블을 생성할 수 있습니다.
<?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 = "CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(50) NOT NULL,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
)";
// 쿼리 실행
$pdo->exec($sql);
echo "Table users created successfully";
} catch (PDOException $e) {
echo "Error creating table: " . $e->getMessage();
}
?>
설명:
- PDO 객체를 사용하여 MySQL 서버에 연결한 후 SQL 쿼리를 통해 테이블을 생성합니다.
- 예외 처리를 통해 테이블 생성 중 오류가 발생하면 오류 메시지를 출력합니다.
4. 테이블 생성 후 상태 확인
테이블이 성공적으로 생성되었는지 확인하기 위해 SQL 쿼리 실행 결과를 통해 확인할 수 있습니다. 테이블이 성공적으로 생성되면 Table created successfully
와 같은
메시지가 출력되고, 오류가 발생하면 오류 메시지가 출력됩니다.
또한 phpMyAdmin이나 MySQL Workbench와 같은 도구를 사용하여 생성된 테이블을 시각적으로 확인할 수 있습니다.
5. 보안 고려 사항
5.1 SQL 인젝션 방지
테이블 이름이나 열 이름이 사용자 입력을 통해 동적으로 생성되는 경우, SQL 인젝션을 방지하기 위해 파라미터화된 쿼리나 유효성 검사를 반드시 수행해야 합니다.
<?php
$tableName = preg_replace("/[^a-zA-Z0-9_]/", "", $_POST['table_name']);
$sql = "CREATE TABLE $tableName (id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY)";
위 예시는 테이블 이름에 알파벳, 숫자, 밑줄만 허용하고 나머지 문자는 제거합니다.
5.2 에러 메시지 관리
데이터베이스와 상호작용할 때 발생할 수 있는 오류 메시지를 사용자에게 직접 노출하지 않는 것이 좋습니다. 대신, 로그 파일에 오류를 기록하고 사용자에게는 간단한 메시지를 제공하는 방식으로 처리할 수 있습니다.
<?php
try {
// PDO로 테이블 생성
$pdo->exec($sql);
} catch (PDOException $e) {
error_log($e->getMessage()); // 로그 파일에 오류 기록
echo "An error occurred while creating the table.";
}
?>
설명:
error_log()
함수를 사용하여 오류를 로그 파일에 기록하고, 보안성을 강화합니다.
6. 테이블 생성 시 고려사항
- 데이터 타입 선택: 각 열의 데이터 타입을 적절히 선택하는 것이 중요합니다. 예를 들어,
INT
,VARCHAR
,DATE
등은 자주 사용되는 데이터 타입입니다. - PRIMARY KEY 설정: 테이블에서 각 행을 유일하게 식별할 수 있는 열에는 PRIMARY KEY를 설정하는 것이 일반적입니다.
- AUTO_INCREMENT: 고유 식별자를 자동으로 증가시키기 위해 AUTO_INCREMENT를 설정할 수 있습니다.
요약
PHP를 사용하여 MySQL 데이터베이스에 테이블을 생성하려면 MySQLi 또는 PDO를 사용할 수 있습니다. 두 방법 모두 SQL 쿼리를 사용하여 테이블을 생성하며, 각 방법에 따라 객체 지향 또는 절차적 방식을 사용할 수 있습니다. 테이블을 생성할 때는 데이터 타입, PRIMARY KEY, AUTO_INCREMENT 등의 설정을 신중하게 고려해야 하며, 사용자 입력에 의한 동적 테이블 생성 시 SQL 인젝션 방지와 보안적인 처리도 중요합니다.