如何基于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
相关产品推荐
相关产品推荐

