php update insert 여러 행 batch (코드공유)
- 프로그래밍/PHP
- 2019. 7. 11.
때는 작년 중순쯤...새 직장에 왔는데, 프레임워크없이 순수 php 코드로 관리자 페이지가 만들어져있었습니당..
대부분의 코드들이 하드코딩 및 레거시코드였고, 심지어 주석에 200x년 초반대 날짜도 적혀있었습니다 ㅋㅋㅋㅋㅋ
흔히 SI업체에서 빠른 작업을 추구하다보니(외주맡겨서 만든 웹사이트),
옛날에 썻던 코드들을 복붙, 반복코드 조차 복붙으로 처리되어있었습니다
마찬가지로 여러 행의 insert 쿼리나 update쿼리조차 for문을 돌리거나, 여러번 복붙해서 코딩이 되어있었습니당
그래서 속도와 효율, 관리차원에서 일괄적으로 인서트 및 업데이트 되도록 함수를 만들어 보았습니다.
1-1) insert batch - 일괄 인서트 함수
function insert_batch($TABLE , $data){
if($TABLE =='' || $data ==''){
return false;
}
if( !is_array($data) ){
return false;
}
//WHERE 쿼리문 만들기
foreach($data[0] as $key=>$value){
$list[] = $key;
}
$WHERE = implode(", ", $list);
$VALUE="";
for($i=0; $i<sizeof($data); $i++){
//VALUE 쿼리문 만들기
$value_qry = "(";
foreach($data[$i] as $key=>$value){
$value_qry .= "'".$value."',";
}
$value_qry = substr($value_qry , 0 , -1);
$value_qry .= ") ,";
$VALUE .= $value_qry;
}
$VALUE = substr($VALUE , 0 , -1);
$qry = "INSERT INTO " .$TABLE. " (".$WHERE.")
VALUE " .$VALUE;
$result = @mysqli_query($DBINFO, $qry );
return $result;
}
1-2) how to use
$tmp = ['컬럼명'=>'값' , '컬럼명'=>'값'];
$data[] = $tmp;
insert_batch('테이블명' , $data);
또는,
$data = [
['컬럼명1'=>'값' , '컬럼명2'=>'값', '컬럼명3'=>'값']
,['컬럼명1'=>'값' , '컬럼명2'=>'값', '컬럼명3'=>'값']
,['컬럼명1'=>'값' , '컬럼명2'=>'값', '컬럼명3'=>'값']
,['컬럼명1'=>'값' , '컬럼명2'=>'값', '컬럼명3'=>'값']
];
insert_batch('테이블명' , $data);
2-1)update batch - 일괄 업데이트 함수
function update_batch($TABLE , $data , $whereColumn){
if( ($TABLE=='') || ($data=='') || ($whereColumn=='') ){
return false;
}
if( !is_array($data) ){
return false;
}
//$list[] = 업데이트할 연관배열목록 빼오기
$tmp = $data[0];
unset($tmp[$whereColumn]);
foreach($tmp as $key=>$value){
$list[] = $key;
}
//SET 쿼리문 만들기
$SET = "";
$szList = sizeof($list);
for($i=0; $i<$szList; $i++){
$set_qry = $list[$i]." = CASE ";
$when_qry = "";
$where_qry = "";
$szData = sizeof($data);
for($j=0; $j<$szData; $j++){
$when_qry .= "WHEN ".$whereColumn."=".$data[$j][$whereColumn]." THEN '".$data[$j][$list[$i]]."' ";
//WHERE 쿼리문 만들기1
$where_qry .= $data[$j][$whereColumn].",";
}
$end_qry = "ELSE ".$list[$i]." END,";
$SET .= $set_qry.$when_qry.$end_qry; //SET 쿼리문 완성
}
$SET = substr($SET , 0 , -1); // 마지막 콤마(,) 자르기
$where = substr($where_qry , 0 , -1); // 마지막 콤마(,) 자르기
//WHERE 쿼리문 만들기2
$WHERE = $whereColumn." IN (".$where.")";
$qry = "UPDATE " .$TABLE.
" SET " .$SET.
" WHERE " .$WHERE;
$result = @mysqli_query($DBINFO, $qry );
return $result;
}
1-2) how to use
$tmp = ['where컬럼'=>'값' , '컬럼명'=>'변경 값' , '컬럼명'=>'변경 값'];
$data[] = $tmp;
update_batch('테이블명' , $data , 'where컬럼');
또는,
$data = [
['where컬럼'=>'where컬럼 값' , '컬럼명1'=>'변경 값', '컬럼명2'=>'변경 값']
,['where컬럼'=>'where컬럼 값' , '컬럼명1'=>'변경 값', '컬럼명2'=>'변경 값']
,['where컬럼'=>'where컬럼 값' , '컬럼명1'=>'변경 값', '컬럼명2'=>'변경 값']
,['where컬럼'=>'where컬럼 값' , '컬럼명1'=>'변경 값', '컬럼명2'=>'변경 값']
];
update_batch('테이블명' , $data , 'where컬럼');
ex)
$arrData = [
[
'm_idx' => 58 ,
'm_memo' => 'My Name 2' ,
'm_recom' => 'My date 2'
],
[
'm_idx' => 57 ,
'm_memo' => 'Another Name 2' ,
'm_recom' => 'Another date 2'
]
];
update_batch('USER' , $arrData , 'm_idx');
'프로그래밍 > PHP' 카테고리의 다른 글
php 다른 도메인으로 리다이렉트 (0) | 2024.06.01 |
---|---|
php8 코드이그나이터 session flashdata 이슈 (0) | 2021.08.20 |
코드이그나이터에서 composer 사용 (0) | 2021.07.19 |
코드이그나이터 index.php 오류 수정 (0) | 2019.12.28 |