PHP에서는 mysql_query() 함수를 사용해 MySQL 테이블을 생성할 수 있습니다. 이 함수에 SQL의 CREATE TABLE 문을 전달하면, PHP 스크립트만으로 데이터베이스에 새로운 테이블을 만들 수 있습니다.
기본 동작 흐름
PHP 스크립트로 MySQL 테이블을 생성하는 과정은 일반적으로 다음 순서로 진행됩니다.
1. 데이터베이스 연결 – 호스트, 사용자명, 비밀번호를 사용해 MySQL 서버에 접속합니다.
2. 데이터베이스 선택 – 테이블을 생성할 대상 데이터베이스를 지정합니다.
3. SQL 쿼리 실행 – CREATE TABLE 문을 mysql_query() 함수로 실행합니다.
4. 결과 확인 및 연결 종료 – 성공 여부를 확인한 뒤 연결을 닫습니다.
예제: 'tutorials_tbl' 테이블 생성하기
아래 예제는 PHP 스크립트를 이용해 tutorials_tbl이라는 이름의 테이블을 생성하는 전체 코드입니다.
<html>
<head>
<title>Creating MySQL Tables</title>
</head>
<body>
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully<br />';
$sql = "CREATE TABLE tutorials_tbl( ".
"tutorial_id INT NOT NULL AUTO_INCREMENT, ".
"tutorial_title VARCHAR(100) NOT NULL, ".
"tutorial_author VARCHAR(40) NOT NULL, ".
"submission_date DATE, ".
"PRIMARY KEY ( tutorial_id )); ";
mysql_select_db( 'TUTORIALS' );
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
die('Could not create table: ' . mysql_error());
}
echo "Table created successfully\n";
mysql_close($conn);
?>
</body>
</html>코드 설명
1. 데이터베이스 연결
mysql_connect() 함수에 호스트 주소, 사용자명, 비밀번호를 인자로 전달하여 MySQL 서버에 접속합니다. 연결에 실패하면 die() 함수가 실행되어 오류 메시지와 함께 스크립트가 종료됩니다.
2. 테이블 구조 정의
생성되는 tutorials_tbl 테이블은 다음과 같은 컬럼으로 구성됩니다.
- tutorial_id: INT 타입의 기본 키(PK)로, NOT NULL 제약 조건과 함께 AUTO_INCREMENT가 설정되어 있어 새 레코드가 추가될 때마다 자동으로 1씩 증가합니다.
- tutorial_title: 최대 100자까지 저장할 수 있는 VARCHAR 타입으로, NULL 값을 허용하지 않습니다.
- tutorial_author: 최대 40자까지 저장할 수 있는 VARCHAR 타입으로, 마찬가지로 NOT NULL 제약 조건이 적용됩니다.
- submission_date: 제출 날짜를 저장하는 DATE 타입 컬럼입니다.
3. 쿼리 실행 및 결과 처리
mysql_select_db()로 작업 대상 데이터베이스('TUTORIALS')를 선택한 후, mysql_query() 함수로 CREATE TABLE 문을 실행합니다. 반환값이 false이면 테이블 생성에 실패한 것이므로 오류 메시지를 출력하고, 성공하면 완료 메시지를 출력한 뒤 mysql_close()로 연결을 종료합니다.
참고: mysql 확장 모듈은 더 이상 사용되지 않습니다
위 예제에 사용된 mysql_* 계열 함수는 PHP 5.5부터 공식적으로 지원 중단(deprecated)되었으며, PHP 7부터는 완전히 제거되었습니다. 따라서 실제 프로젝트에서는 보안과 유지보수 측면에서 다음과 같은 대체 방식을 사용하는 것이 좋습니다.
- MySQLi 확장: mysqli_connect(), mysqli_query() 등을 사용하며 절차적 방식과 객체 지향 방식을 모두 지원합니다.
- PDO(PHP Data Objects): MySQL뿐 아니라 다양한 데이터베이스를 일관된 인터페이스로 다룰 수 있어 코드 이식성이 뛰어납니다.
두 방식 모두 준비된 문(Prepared Statement)을 지원하므로 SQL 인젝션 공격을 효과적으로 방어할 수 있다는 장점도 있습니다.