인사 정보 동기화 시작 (PDO 방식)";
echo "총 대상 인원: {$total_count}명
";
// 1. PDO Prepared Statement 준비 (위치 보유자 '?' 사용)
$sql = "CALL proc_edu_users_in(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
$stmt = $conn->prepare($sql);
$SET_injection_at = date('Y-m-d H:i:s');
foreach ($user_list as $row) {
// 데이터 정리 (null 처리)
$params = [
$row['member_id'] ?? '',
$row['sys_comp_code'] ?? '',
$row['name'] ?? '',
$row['dept_name'] ?? '',
$row['rank_name'] ?? '',
(!empty($row['join_date'])) ? $row['join_date'] : null,
$row['belong_comp'] ?? '',
$row['working_comp'] ?? '',
$row['intra_pw'] ?? '',
$row['auth_level'] ?? '',
(!empty($row['end_date'])) ? $row['end_date'] : null,
$row['intro_flag'] ?? '0',
$row['belong_comp_id'] ?? '',
$row['working_comp_id'] ?? '',
$row['created_at'] ?? date('Y-m-d H:i:s'),
$row['updated_at'] ?? date('Y-m-d H:i:s'),
$SET_injection_at // injection_at
];
// 2. 실행 (PDO는 execute에 배열을 바로 넣으면 바인딩됩니다)
try {
if ($stmt->execute($params)) {
$success_count++;
// 대량 데이터 처리 시 진행 상황 출력 (100명 단위)
if ($success_count % 1000 == 0) {
echo "현재 {$success_count}명 처리 중...
";
flush(); // 화면에 즉시 반영
}
} else {
$error_count++;
}
} catch (PDOException $e) {
$error_count++;
// 프로시저 내부 에러 로그는 테이블에 쌓이겠지만 PHP 에러도 확인용 출력
echo "에러(ID: " . ($row['member_id'] ?? 'unknown') . "): " . $e->getMessage() . "
";
}
}
// ---------------------------------------------------------
// 로그 파일 생성 및 저장 로직 (한글 깨짐 방지 적용)
// ---------------------------------------------------------
$log_dir = $_SERVER['DOCUMENT_ROOT'] . "/edu/log/";
$log_file_name = "users_info_batch_" . date('Y') . ".txt";
$log_path = $log_dir . $log_file_name;
// 폴더 생성
if (!is_dir($log_dir)) {
mkdir($log_dir, 0777, true);
}
// 로그 내용 구성
$new_log_entry = "주입일자= {$SET_injection_at} , 성공카운트 = {$success_count} , 실패카운트= {$error_count}" . PHP_EOL;
// UTF-8 BOM (한글 깨짐 방지용 식별코드)
$bom = "\xEF\xBB\xBF";
if (file_exists($log_path)) {
// 기존 내용을 읽어옴
$existing_content = file_get_contents($log_path);
// 기존 내용에 BOM이 이미 있다면 제거 (내용 결합 시 중복 방지)
$existing_content = str_replace($bom, '', $existing_content);
// [BOM] + [새 로그] + [기존 로그] 순서로 저장
file_put_contents($log_path, $bom . $new_log_entry . $existing_content);
} else {
// 파일이 처음 생성될 때 BOM과 함께 저장
file_put_contents($log_path, $bom . $new_log_entry);
}
// ---------------------------------------------------------
// ---------------------------------------------------------
echo "
";
echo "처리 완료!
";
echo "성공: {$success_count}건 / 실패: {$error_count}건";
/*
해당파일 처리완료후 로그파일 생성
생성위치 /edu/log/ 폴더아래
users_info_batch_2026.txt 파일을 생성하여 저장한다
파일명 마지막은 현재년도가 들어간 파일명이다.
해당폴더에 파일이 없을 경우 생성
파일이 존재시
파일에 있는 로그내용 위에 새로운 로그내용을 추가한다.
추가될 내용은 주입일자= $SET_injection_at , 성공카운트 = $success_count , 실패카운트= $error_count
*/
?>