- URL 하드코딩 → .env APP_URL 기반 동적 URL로 변경 - DB 연결 하드코딩 → .env 기반으로 변경 - MySQL strict mode DATE 오류 수정
54 lines
1.9 KiB
PHP
54 lines
1.9 KiB
PHP
<?php
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . "/session.php");
|
|
require_once($_SERVER['DOCUMENT_ROOT'] . "/lib/mydb.php");
|
|
$pdo = db_connect();
|
|
|
|
$search = $_POST['search'] ?? ''; // 검색어 (없으면 빈 문자열)
|
|
$whichItem = $_POST['whichItem'] ?? ''; // 스크린, 스라트
|
|
|
|
if (!isset($DB)) {
|
|
$DB = 'chandj'; // 실제 데이터베이스 이름으로 설정
|
|
}
|
|
|
|
try {
|
|
// 1. 테이블의 컬럼 목록 가져오기
|
|
$columnQuery = $pdo->query("SHOW COLUMNS FROM {$DB}.estimate");
|
|
$columns = $columnQuery->fetchAll(PDO::FETCH_COLUMN);
|
|
|
|
// 2. 기본 WHERE 조건 설정 (major_category 필터 적용)
|
|
$conditions = ["major_category = :whichItem"];
|
|
$bindParams = [":whichItem" => $whichItem];
|
|
|
|
// 3. 검색어가 있는 경우, 전체 컬럼에서 LIKE 검색 적용
|
|
if (!empty($search)) {
|
|
$searchConditions = [];
|
|
foreach ($columns as $index => $column) {
|
|
$paramName = ":search" . $index; // 유니크한 바인딩 변수 생성 (:search0, :search1, ...)
|
|
$searchConditions[] = "$column LIKE $paramName";
|
|
$bindParams[$paramName] = "%{$search}%";
|
|
}
|
|
$conditions[] = "(" . implode(" OR ", $searchConditions) . ")";
|
|
}
|
|
|
|
// 4. 최종 SQL 쿼리 구성
|
|
$sql = "SELECT * FROM {$DB}.estimate WHERE " . implode(" AND ", $conditions) . " AND (is_deleted IS NULL or is_deleted ='0') ORDER BY indate DESC";
|
|
$stmh = $pdo->prepare($sql);
|
|
|
|
// 5. 1:1 바인딩 적용 (PHP 7.3 호환)
|
|
foreach ($bindParams as $key => $val) {
|
|
$stmh->bindValue($key, $val, PDO::PARAM_STR);
|
|
}
|
|
|
|
$stmh->execute();
|
|
$output_rows = $stmh->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
// JSON 출력
|
|
header('Content-Type: application/json');
|
|
echo json_encode($output_rows ?: []);
|
|
} catch (PDOException $Exception) {
|
|
header('Content-Type: application/json');
|
|
echo json_encode(["error" => $Exception->getMessage()]);
|
|
exit;
|
|
}
|
|
?>
|