CSV 파일을 읽어들여 DB에 저장하는 소스코드
아침에 2012/02/22 – 오늘 할 일은..라는 글을 쓴 후로 csv 파일에 저장된 회원 정보를 DB에 저장하는 코들 작성했다.
테스트 환경은 PHP 5.2.17, MySQL 5.5.15이다.
우선 테스트에 사용된 DB 테이블은 아래와 같이 생성했다.
`mb_no` int(11) NOT NULL AUTO_INCREMENT,
`mb_id` varchar(20) NOT NULL,
`mb_password` varchar(255) NOT NULL,
`mb_name` varchar(255) NOT NULL,
PRIMARY KEY (`mb_no`),
KEY `mb_id` (`mb_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
CSV 파일의 구조와 내용은 아래 이미지와 같다.
아래는 csv 파일의 내용을 DB에 입력하는 소스코드이다.
include_once(“./dbconfig.php”);
// DB Connect
$connect = mysql_connect($mysql_host, $mysql_user, $mysql_password);
if(!$connect) {
die(“Can’t Connect DB : ” . mysql_error());
}
@mysql_query(” set names utf8 “);
$db_selected = mysql_select_db($mysql_db, $connect);
if(!$db_selected) {
die(“Can’t Use $mysql_db : ” . mysql_error());
}
function mysql_password($value) // 비밀번호 암호화 함수
{
$sql = ” select password(‘$value’) as pass “;
$result = mysql_query($sql);
$row = mysql_fetch_assoc($result);
return $row[pass];
}
$csv = “./member.csv”;
$lines = file($csv); // member.csv 파일 전체를 배열로 읽어들임
$count = count($lines); // 파일의 라인 수
for($i = 1; $i < $count; $i++) {
// csv 파일의 두번째 라인부터 DB에 입력해야 하므로 $i = 1
$str = explode(“,”, rtrim($lines[$i], “rn”));
$mb_id = trim(strip_tags(mysql_escape_string(addslashes($str[0]))));
if(!$mb_id) { // mb_id 없으면 다음 라인
continue;
}
$mb_password = mysql_password(trim(mysql_escape_string(addslashes($str[1]))));
$mb_name = trim(strip_tags(mysql_escape_string(addslashes($str[2]))));
$sql = ” insert into mb_old (mb_id, mb_password, mb_name) values (‘$mb_id’, ‘$mb_password’, ‘$mb_name’) “;
$result = mysql_query($sql);
if(!$result) { // 쿼리 에러 시 다음 라인
continue;
}
}
?>
이런 식으로 구성해서 파일을 웹서버에서 실행했을 때 CSV 파일의 내용이 DB에 정상적으로 입력되었다.
실제 회원 DB를 입력할 때는 몇가지 추가해야할 부분.. 예들들어 mb_id가 중복되는 지 등의 체크를 해야할 것이다.
한가지 주의할 점은 DB 서버의 문자셋이 UTF-8 이므로 csv 파일 역시 UTF-8 이어야 한다.
그렇지 않으면 한글 부분이 정상적으로 입력이 되지 않는다.