beginTransaction(); /* ---------- 신규 추가(INSERT) 직접 쿼리 방식 ---------- */ if ($inserts) { // 1. 함수 대신 직접 INSERT 쿼리 준비 // fa_id는 자동 생성이므로 제외, cdt는 DB 함수 사용 $sqlI = "INSERT INTO kngil.fa_comments ( fa_subject, fa_content, sq_no, use_yn, cid, cdt ) VALUES ( :fa_subject, :fa_content, :sq_no, :use_yn, :cid, CURRENT_TIMESTAMP )"; $stmtI = $pdo->prepare($sqlI); foreach ($inserts as $r) { $stmtI->execute([ ':fa_subject' => $r['fa_subject'] ?? '', ':fa_content' => $r['fa_content'] ?? '', ':sq_no' => (int)($r['sq_no'] ?? 0), // 숫자형 보장 ':use_yn' => $r['use_yn'] ?? 'Y', ':cid' => $user_id ]); } } /* ---------- 수정(UPDATE) 직접 쿼리 방식 ---------- */ if ($updates) { // 1. 함수 대신 직접 UPDATE 쿼리 준비 $sqlU = "UPDATE kngil.fa_comments SET fa_subject = :fa_subject, fa_content = :fa_content, sq_no = :sq_no, use_yn = :use_yn, mid = :mid, mdt = CURRENT_TIMESTAMP WHERE fa_id = :fa_id"; $stmtU = $pdo->prepare($sqlU); foreach ($updates as $r) { $stmtU->execute([ ':fa_id' => $r['fa_id'], // 필수 조건 ':fa_subject' => $r['fa_subject'] ?? '', ':fa_content' => $r['fa_content'] ?? '', ':sq_no' => (int)($r['sq_no'] ?? 0), ':use_yn' => $r['use_yn'] ?? 'Y', ':mid' => $user_id ]); } } $pdo->commit(); echo json_encode(['status' => 'success']); break; default: throw new Exception('잘못된 요청'); } } catch (Exception $e) { if ($pdo->inTransaction()) { $pdo->rollBack(); } http_response_code(403); echo json_encode([ 'status' => 'error', 'message' => $e->getMessage() ]); }