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>
This commit is contained in:
2025-12-13 13:18:23 +09:00
parent b1128bedb5
commit 0716754bf5
7 changed files with 28 additions and 24 deletions

View File

@@ -124,7 +124,7 @@ $notesReceivableSql = "SELECT
END END
) as outstanding_balance ) as outstanding_balance
FROM $tablename FROM $tablename
WHERE (dueDate != '0000-00-00' AND dueDate IS NOT NULL AND dueDate != '') WHERE (dueDate IS NOT NULL)
AND (is_deleted IS NULL OR is_deleted = 0) AND (is_deleted IS NULL OR is_deleted = 0)
AND bankbook = '전자어음' AND bankbook = '전자어음'
GROUP BY bill_no GROUP BY bill_no

View File

@@ -64,9 +64,10 @@ $warranty = isset($_REQUEST['warranty']) ? $_REQUEST['warranty'] : '';
$ordersheet = isset($_REQUEST['ordersheet']) ? $_REQUEST['ordersheet'] : '{}'; $ordersheet = isset($_REQUEST['ordersheet']) ? $_REQUEST['ordersheet'] : '{}';
$ordersheet_slat = isset($_REQUEST['ordersheet_slat']) ? $_REQUEST['ordersheet_slat'] : '{}'; $ordersheet_slat = isset($_REQUEST['ordersheet_slat']) ? $_REQUEST['ordersheet_slat'] : '{}';
$ACIregDate = isset($_REQUEST["ACIregDate"]) ? $_REQUEST["ACIregDate"] : ''; // 인정검사 관련 4가지 // 인정검사 관련 날짜 필드 - 빈 문자열은 NULL로 처리 (MySQL 8.0 Strict Mode 호환)
$ACIaskDate = isset($_REQUEST["ACIaskDate"]) ? $_REQUEST["ACIaskDate"] : ''; $ACIregDate = isset($_REQUEST["ACIregDate"]) && $_REQUEST["ACIregDate"] !== '' ? $_REQUEST["ACIregDate"] : null;
$ACIdoneDate = isset($_REQUEST["ACIdoneDate"]) ? $_REQUEST["ACIdoneDate"] : ''; $ACIaskDate = isset($_REQUEST["ACIaskDate"]) && $_REQUEST["ACIaskDate"] !== '' ? $_REQUEST["ACIaskDate"] : null;
$ACIdoneDate = isset($_REQUEST["ACIdoneDate"]) && $_REQUEST["ACIdoneDate"] !== '' ? $_REQUEST["ACIdoneDate"] : null;
$ACImemo = isset($_REQUEST["ACImemo"]) ? $_REQUEST["ACImemo"] : ''; $ACImemo = isset($_REQUEST["ACImemo"]) ? $_REQUEST["ACImemo"] : '';
$iList = isset($_REQUEST['iList']) ? $_REQUEST['iList'] : '{}'; // 인정검사 자료 $iList = isset($_REQUEST['iList']) ? $_REQUEST['iList'] : '{}'; // 인정검사 자료

View File

@@ -51,6 +51,8 @@ $recordslat = isset($row['recordslat']) ? $row['recordslat'] : '{}';
$recordbending = isset($row['recordbending']) ? $row['recordbending'] : '{}'; $recordbending = isset($row['recordbending']) ? $row['recordbending'] : '{}';
$estimateList = isset($row['estimateList']) ? $row['estimateList'] : '{}'; $estimateList = isset($row['estimateList']) ? $row['estimateList'] : '{}';
$estimateSlatList = isset($row['estimateSlatList']) ? $row['estimateSlatList'] : '{}'; $estimateSlatList = isset($row['estimateSlatList']) ? $row['estimateSlatList'] : '{}';
$eList_screen = isset($row['eList_screen']) ? $row['eList_screen'] : '{}';
$eList_slat = isset($row['eList_slat']) ? $row['eList_slat'] : '{}';
$etcList = isset($row['etcList']) ? $row['etcList'] : '{}'; $etcList = isset($row['etcList']) ? $row['etcList'] : '{}';
$screen_unapprovedList = isset($row['screen_unapprovedList']) ? $row['screen_unapprovedList'] : '{}'; $screen_unapprovedList = isset($row['screen_unapprovedList']) ? $row['screen_unapprovedList'] : '{}';
$slat_unapprovedList = isset($row['slat_unapprovedList']) ? $row['slat_unapprovedList'] : '{}'; $slat_unapprovedList = isset($row['slat_unapprovedList']) ? $row['slat_unapprovedList'] : '{}';

View File

@@ -9,8 +9,9 @@ header("Content-Type: application/json");
$num = isset($_REQUEST['num']) ? $_REQUEST['num'] : ''; $num = isset($_REQUEST['num']) ? $_REQUEST['num'] : '';
$tablename = isset($_REQUEST['tablename']) ? $_REQUEST['tablename'] : 'output'; $tablename = isset($_REQUEST['tablename']) ? $_REQUEST['tablename'] : 'output';
$ACIaskDate = isset($_REQUEST['ACIaskDate']) ? $_REQUEST['ACIaskDate'] : ''; // 날짜 필드 - 빈 문자열은 NULL로 처리 (MySQL 8.0 Strict Mode 호환)
$ACIdoneDate = isset($_REQUEST['ACIdoneDate']) ? $_REQUEST['ACIdoneDate'] : ''; $ACIaskDate = isset($_REQUEST['ACIaskDate']) && $_REQUEST['ACIaskDate'] !== '' ? $_REQUEST['ACIaskDate'] : null;
$ACIdoneDate = isset($_REQUEST['ACIdoneDate']) && $_REQUEST['ACIdoneDate'] !== '' ? $_REQUEST['ACIdoneDate'] : null;
// JSON 데이터를 저장할 경로 설정 // JSON 데이터를 저장할 경로 설정
$jsonFilePath = "../output/i_json/" . $num . ".json"; $jsonFilePath = "../output/i_json/" . $num . ".json";

View File

@@ -96,11 +96,11 @@ if ($separate_date == "1") {
$orderby = " ORDER BY " . $SettingDate . " DESC, num DESC"; // 내림차순 정렬 $orderby = " ORDER BY " . $SettingDate . " DESC, num DESC"; // 내림차순 정렬
if ($existing_status == '전체') { if ($existing_status == '전체') {
$where = " WHERE " . $SettingDate . " BETWEEN date('$fromdate') AND date('$Transtodate') AND is_deleted = '0' AND ACIdoneDate IS NOT NULL AND ACIdoneDate != '' " . $orderby; $where = " WHERE " . $SettingDate . " IS NOT NULL AND " . $SettingDate . " >= '$fromdate' AND " . $SettingDate . " <= '$Transtodate' AND is_deleted = '0' AND ACIdoneDate IS NOT NULL " . $orderby;
$searchwhere = " WHERE is_deleted = '0' AND ACIdoneDate IS NOT NULL AND ACIdoneDate != '' AND searchtag LIKE '%$search%'" . $orderby; $searchwhere = " WHERE is_deleted = '0' AND ACIdoneDate IS NOT NULL AND searchtag LIKE '%$search%'" . $orderby;
} else { } else {
$where = " WHERE " . $SettingDate . " BETWEEN date('$fromdate') AND date('$Transtodate') AND is_deleted = '0' AND regist_state = '$existing_status' AND ACIdoneDate IS NOT NULL AND ACIdoneDate != '' " . $orderby; $where = " WHERE " . $SettingDate . " IS NOT NULL AND " . $SettingDate . " >= '$fromdate' AND " . $SettingDate . " <= '$Transtodate' AND is_deleted = '0' AND regist_state = '$existing_status' AND ACIdoneDate IS NOT NULL " . $orderby;
$searchwhere = " WHERE is_deleted = '0' AND regist_state = '$existing_status' AND ACIdoneDate IS NOT NULL AND ACIdoneDate != '' AND searchtag LIKE '%$search%'" . $orderby; $searchwhere = " WHERE is_deleted = '0' AND regist_state = '$existing_status' AND ACIdoneDate IS NOT NULL AND searchtag LIKE '%$search%'" . $orderby;
} }
// 수정된 쿼리: ACIdoneDate이 존재하고 is_deleted가 0인 자료만 선택 // 수정된 쿼리: ACIdoneDate이 존재하고 is_deleted가 0인 자료만 선택

View File

@@ -72,11 +72,11 @@ $orderby = " ORDER BY num DESC"; // 내림차순 정렬
$orderby_with_date = " ORDER BY " . $SettingDate . " DESC, num DESC"; // 날짜+번호 내림차순 정렬 $orderby_with_date = " ORDER BY " . $SettingDate . " DESC, num DESC"; // 날짜+번호 내림차순 정렬
if ($existing_status == '전체') { if ($existing_status == '전체') {
$where = " WHERE CAST(" . $SettingDate . " AS CHAR) >= '$fromdate' AND CAST(" . $SettingDate . " AS CHAR) <= '$Transtodate' AND CAST(" . $SettingDate . " AS CHAR) != '' AND CAST(" . $SettingDate . " AS CHAR) != '0000-00-00' AND is_deleted = '0' AND ACIregDate IS NOT NULL AND ACIregDate != '' AND (ACIcheck = '' or ACIcheck IS NULL) " . $orderby; $where = " WHERE " . $SettingDate . " IS NOT NULL AND " . $SettingDate . " >= '$fromdate' AND " . $SettingDate . " <= '$Transtodate' AND is_deleted = '0' AND ACIregDate IS NOT NULL AND (ACIcheck = '' OR ACIcheck IS NULL) " . $orderby;
$searchwhere = " WHERE is_deleted = '0' AND ACIregDate IS NOT NULL AND ACIregDate != '' AND (ACIcheck = '' or ACIcheck IS NULL) AND searchtag LIKE '%$search%'" . $orderby; $searchwhere = " WHERE is_deleted = '0' AND ACIregDate IS NOT NULL AND (ACIcheck = '' OR ACIcheck IS NULL) AND searchtag LIKE '%$search%'" . $orderby;
} else { } else {
$where = " WHERE CAST(" . $SettingDate . " AS CHAR) >= '$fromdate' AND CAST(" . $SettingDate . " AS CHAR) <= '$Transtodate' AND CAST(" . $SettingDate . " AS CHAR) != '' AND CAST(" . $SettingDate . " AS CHAR) != '0000-00-00' AND is_deleted = '0' AND regist_state = '$existing_status' AND ACIregDate IS NOT NULL AND ACIregDate != '' AND (ACIcheck = '' or ACIcheck IS NULL) " . $orderby; $where = " WHERE " . $SettingDate . " IS NOT NULL AND " . $SettingDate . " >= '$fromdate' AND " . $SettingDate . " <= '$Transtodate' AND is_deleted = '0' AND regist_state = '$existing_status' AND ACIregDate IS NOT NULL AND (ACIcheck = '' OR ACIcheck IS NULL) " . $orderby;
$searchwhere = " WHERE is_deleted = '0' AND regist_state = '$existing_status' AND ACIregDate IS NOT NULL AND ACIregDate != '' AND (ACIcheck = '' or ACIcheck IS NULL) AND searchtag LIKE '%$search%'" . $orderby; $searchwhere = " WHERE is_deleted = '0' AND regist_state = '$existing_status' AND ACIregDate IS NOT NULL AND (ACIcheck = '' OR ACIcheck IS NULL) AND searchtag LIKE '%$search%'" . $orderby;
} }
// 수정된 쿼리: ACIregDate이 존재하고 is_deleted가 0인 자료만 선택 // 수정된 쿼리: ACIregDate이 존재하고 is_deleted가 0인 자료만 선택

View File

@@ -71,11 +71,11 @@ if ($separate_date == "1") {
$orderby = " ORDER BY " . $SettingDate . " DESC, num DESC"; // 내림차순 정렬 $orderby = " ORDER BY " . $SettingDate . " DESC, num DESC"; // 내림차순 정렬
if ($existing_status == '전체') { if ($existing_status == '전체') {
$where = " WHERE " . $SettingDate . " BETWEEN date('$fromdate') AND date('$Transtodate') AND is_deleted = '0' AND ACIregDate IS NOT NULL AND ACIregDate != '' AND ACIcheck = '1' " . $orderby; $where = " WHERE " . $SettingDate . " IS NOT NULL AND " . $SettingDate . " >= '$fromdate' AND " . $SettingDate . " <= '$Transtodate' AND is_deleted = '0' AND ACIregDate IS NOT NULL AND ACIcheck = '1' " . $orderby;
$searchwhere = " WHERE is_deleted = '0' AND ACIregDate IS NOT NULL AND ACIregDate != '' AND ACIcheck = '1' AND searchtag LIKE '%$search%'" . $orderby; $searchwhere = " WHERE is_deleted = '0' AND ACIregDate IS NOT NULL AND ACIcheck = '1' AND searchtag LIKE '%$search%'" . $orderby;
} else { } else {
$where = " WHERE " . $SettingDate . " BETWEEN date('$fromdate') AND date('$Transtodate') AND is_deleted = '0' AND regist_state = '$existing_status' AND ACIregDate IS NOT NULL AND ACIregDate != '' AND ACIcheck = '1' " . $orderby; $where = " WHERE " . $SettingDate . " IS NOT NULL AND " . $SettingDate . " >= '$fromdate' AND " . $SettingDate . " <= '$Transtodate' AND is_deleted = '0' AND regist_state = '$existing_status' AND ACIregDate IS NOT NULL AND ACIcheck = '1' " . $orderby;
$searchwhere = " WHERE is_deleted = '0' AND regist_state = '$existing_status' AND ACIregDate IS NOT NULL AND ACIregDate != '' AND ACIcheck = '1' AND searchtag LIKE '%$search%'" . $orderby; $searchwhere = " WHERE is_deleted = '0' AND regist_state = '$existing_status' AND ACIregDate IS NOT NULL AND ACIcheck = '1' AND searchtag LIKE '%$search%'" . $orderby;
} }
// 수정된 쿼리: ACIregDate이 존재하고 is_deleted가 0인 자료만 선택 // 수정된 쿼리: ACIregDate이 존재하고 is_deleted가 0인 자료만 선택