// --- OPTION B: store in MySQL via PDO --- $dbHost = 'localhost'; $dbName = 'your_cpanel_dbname'; $dbUser = 'your_cpanel_dbuser'; $dbPass = 'your_cpanel_dbpass'; try { $dsn = "mysql:host=$dbHost;dbname=$dbName;charset=utf8mb4"; $pdo = new PDO($dsn, $dbUser, $dbPass, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); $stmt = $pdo->prepare(" INSERT INTO racklet_readings ( serial, fw_version, ip, ip_mode, dht_temp, dht_hum, chip_temp, uptime_ms, free_heap, sd_card, wifi_ssid, wifi_rssi, wifi_channel, remote_ip ) VALUES ( :serial, :fw_version, :ip, :ip_mode, :dht_temp, :dht_hum, :chip_temp, :uptime_ms, :free_heap, :sd_card, :wifi_ssid, :wifi_rssi, :wifi_channel, :remote_ip ) "); $stmt->execute([ ':serial' => $serial, ':fw_version' => $fwVersion, ':ip' => $ip, ':ip_mode' => $ipMode, ':dht_temp' => $dhtTemp, ':dht_hum' => $dhtHum, ':chip_temp' => $chipTemp, ':uptime_ms' => $uptimeMs, ':free_heap' => $freeHeap, ':sd_card' => is_null($sdCard) ? null : (int)!!$sdCard, ':wifi_ssid' => $wifiSsid, ':wifi_rssi' => $wifiRssi, ':wifi_channel'=> $wifiChannel, ':remote_ip' => $_SERVER['REMOTE_ADDR'] ?? null, ]); header('Content-Type: application/json'); echo json_encode([ 'status' => 'ok', 'message' => 'Data stored in DB', 'id' => $pdo->lastInsertId(), ]); } catch (PDOException $e) { http_response_code(500); header('Content-Type: application/json'); echo json_encode([ 'status' => 'error', 'message' => 'DB error', 'error' => $e->getMessage(), ]); }