Files
sam-kd/output/insert_iList.php
kent 0716754bf5 fix(mysql8): MySQL 8.0 Strict Mode DATE 필드 호환성 수정
MySQL 8.0의 Strict Mode에서 DATE 컬럼에 빈 문자열('')을 허용하지 않는
문제를 해결하기 위해 여러 파일 수정

📁 수정된 파일:
- output/_request.php: DATE 필드 빈 문자열을 NULL로 변환
- output/insert_iList.php: ACIaskDate, ACIdoneDate NULL 처리
- output/_row.php: eList_screen, eList_slat 변수 추가
- output/list_document.php: DATE 비교 조건에서 != '' 제거
- output/list_document_except.php: DATE 비교 조건에서 != '' 제거
- output/list_QCsales.php: ACIdoneDate != '' 조건 제거
- account_juil/list_daily.php: dueDate != '' 조건 제거

🐛 해결된 오류:
- SQLSTATE[HY000]: General error: 1525 Incorrect DATE value: ''
- Internal Server Error (undefined variables)

🔧 변경 내용:
- 날짜 필드 입력 시 빈 문자열 → NULL 변환
- SQL WHERE 절에서 DATE != '' 비교 → IS NOT NULL 비교로 변경
- MySQL 8.0 STRICT_TRANS_TABLES, NO_ZERO_DATE 모드 호환

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 13:23:41 +09:00

72 lines
2.4 KiB
PHP

<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
header("Content-Type: application/json");
$num = isset($_REQUEST['num']) ? $_REQUEST['num'] : '';
$tablename = isset($_REQUEST['tablename']) ? $_REQUEST['tablename'] : 'output';
// 날짜 필드 - 빈 문자열은 NULL로 처리 (MySQL 8.0 Strict Mode 호환)
$ACIaskDate = isset($_REQUEST['ACIaskDate']) && $_REQUEST['ACIaskDate'] !== '' ? $_REQUEST['ACIaskDate'] : null;
$ACIdoneDate = isset($_REQUEST['ACIdoneDate']) && $_REQUEST['ACIdoneDate'] !== '' ? $_REQUEST['ACIdoneDate'] : null;
// JSON 데이터를 저장할 경로 설정
$jsonFilePath = "../output/i_json/" . $num . ".json";
if (isset($_POST['iList'])) {
$iList_jsondata = json_decode($_POST['iList'], true);
if ($iList_jsondata === null && json_last_error() !== JSON_ERROR_NONE) {
echo json_encode(['error' => 'Invalid JSON data provided.'], JSON_UNESCAPED_UNICODE);
exit;
}
// 기존 JSON 파일 삭제
if (file_exists($jsonFilePath)) {
unlink($jsonFilePath); // 기존 파일 삭제
}
// JSON 데이터를 파일에 저장
file_put_contents($jsonFilePath, json_encode($iList_jsondata, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
} else {
$iList_jsondata = null;
}
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
$pdo = db_connect();
try {
$pdo->beginTransaction();
// 데이터베이스에 파일 경로를 저장
$sql = "UPDATE {$DB}.{$tablename} SET iList=?, ACIdoneDate=?, ACIaskDate=? WHERE num=? LIMIT 1";
$stmh = $pdo->prepare($sql);
$stmh->bindValue(1, $jsonFilePath, PDO::PARAM_STR); // JSON 파일 경로를 저장
$stmh->bindValue(2, $ACIdoneDate, PDO::PARAM_STR);
$stmh->bindValue(3, $ACIaskDate, PDO::PARAM_STR);
$stmh->bindValue(4, $num, PDO::PARAM_STR);
$stmh->execute();
$pdo->commit();
} catch (PDOException $Exception) {
$pdo->rollBack(); // 트랜잭션 롤백
error_log("오류: " . $Exception->getMessage());
echo json_encode(['error' => $Exception->getMessage()], JSON_UNESCAPED_UNICODE);
exit;
}
$data = [
'num' => $num,
'iList source : ' => $_POST['iList'],
'json_file' => $jsonFilePath,
'iList_jsondata' => $iList_jsondata,
'message' => 'JSON data saved to file and database updated successfully.'
];
echo json_encode($data, JSON_UNESCAPED_UNICODE);
?>