You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于SQLite表中字符串的数字设置表格单元格背景色

解决方案

核心思路

将12位字符串拆分为单个字符,逐个对应月份,根据字符值(0/1)分配对应的CSS类,生成表格单元格。同时修复原代码的SQL注入风险,简化冗余逻辑。

优化后的代码

<?php
$myID = $_GET['myID'];
// 定义月份缩写数组,顺序对应字符串的12位(索引0=1月,索引11=12月)
$months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

try {
    $conn = new PDO('sqlite:db/myDatabase.db');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    // 使用参数绑定修复SQL注入风险
    $stmt = $conn->prepare("SELECT season_string FROM myTable WHERE myID = ?");
    $stmt->execute([$myID]);
    $data = $stmt->fetchAll(PDO::FETCH_ASSOC);

    if (!empty($data)) {
        foreach ($data as $row) {
            $seasonStr = $row['season_string'];
            // 验证字符串格式有效性
            if (strlen($seasonStr) !== 12) {
                echo "Invalid season data format.";
                continue;
            }
            echo "<table><tr>";
            // 遍历每个字符与对应月份
            for ($i = 0; $i < 12; $i++) {
                $month = $months[$i];
                $char = $seasonStr[$i];
                // 根据字符值选择CSS类
                $class = ($char === '1') ? 'season1' : 'season2';
                echo "<td class='$class'>$month</td>";
            }
            echo "</tr></table>";
        }
    } else {
        echo "No records found.";
    }
} catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}
$conn = null;
?>

关键说明

  • 字符串拆分:PHP中可直接通过$seasonStr[$i]访问字符串的第i个字符,无需额外拆分函数
  • 月份映射:用数组存储月份缩写,索引与字符串位置一一对应,彻底消除重复代码
  • 安全修复:替换原SQL语句为参数绑定方式,避免SQL注入攻击
  • 格式校验:增加字符串长度检查,防止无效数据导致展示异常
  • 逻辑简化:用循环替代12次重复的条件判断,代码更易维护

内容的提问来源于stack exchange,提问作者Szabolcs Horvath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:50:28