DATA/BYBIT/daemon/collection/bybit_total_query.php
<?php
// ============================================================
// 쿼리 : bybit_total_query.php
// SHOW COLUMNS 동적 처리 - 컬럼 하드코딩 없음
// $rows 받아서 daemon_bybit_Ticker에 저장
// ============================================================

if (empty($pdo)) { echo "PDO 없음\n"; return; }
if (empty($rows)) return;

// 컬럼 목록 동적으로 읽기
$col_stmt = $pdo->query("SHOW COLUMNS FROM daemon_bybit_Ticker");
$all_cols = $col_stmt->fetchAll(PDO::FETCH_COLUMN);

// updated_at, id 제외
$use_cols = array_values(array_filter($all_cols, fn($c) => !in_array($c, ['updated_at', 'id'])));

$placeholders = [];
$params       = [];

foreach ($rows as $i => $d) {
    $row_vals = [];
    foreach ($use_cols as $col) {
        $row_vals[] = ":{$col}_{$i}";
        $params["{$col}_{$i}"] = $d[$col] ?? null;
    }
    $placeholders[] = '(' . implode(', ', $row_vals) . ', NOW())';
}

$col_list = implode(', ', array_map(fn($c) => "`{$c}`", $use_cols)) . ', `updated_at`';

$update_list = implode(', ', array_map(
    fn($c) => "`{$c}` = VALUES(`{$c}`)",
    array_filter($use_cols, fn($c) => $c !== 'symbol')
)) . ', `updated_at` = NOW()';

$sql = "
    INSERT INTO daemon_bybit_Ticker ({$col_list})
    VALUES " . implode(',', $placeholders) . "
    ON DUPLICATE KEY UPDATE {$update_list}
";

try {
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    echo "DB 저장 완료\n";
} catch (Throwable $e) {
    echo "DB 에러: " . $e->getMessage() . "\n";
}