如何用IF语句实现SQL TRANSFER表收支列的互斥显示(PHP场景)
解决方案
首先修正SQL语句的参数绑定问题(原代码存在参数不匹配的错误,会导致查询失效),再通过PHP条件判断实现收支列的互斥显示:
<tr> <th scope="col">AMOUNT CR</th> <th scope="col">AMOUNT DB</th> </tr> <?php $cs_id = $_SESSION['cs_id']; // 使用占位符避免SQL注入,同时修正参数不匹配问题 $his = $reg_user->runQuery("SELECT * FROM transfer WHERE cs_id = :cs_id ORDER BY id DESC LIMIT 3"); $his->execute(array(":cs_id" => $cs_id)); while($rows = $his->fetch(PDO::FETCH_ASSOC)) { // 判断贷方金额是否为有效数值(可根据实际数据类型调整判断逻辑) $hasCredit = !empty($rows['amount_cr']) && $rows['amount_cr'] > 0; ?> <tr> <td style="color:green;" scope="row"> <?php echo $hasCredit ? "+ $ " . $rows['amount_cr'] : ""; ?> </td> <td style="color:red;" scope="row"> <?php echo !$hasCredit ? "- $" . $rows['amount_db'] : ""; ?> </td> </tr> <?php } ?>
关键说明:
- 参数绑定修正:原代码中SQL使用
$cs_id变量,但execute传递的是:cs_uname参数,属于参数不匹配,改为绑定:cs_id参数,同时避免SQL注入风险。 - 互斥显示逻辑:通过判断
amount_cr是否为有效数值,决定仅显示贷方列或借方列,另一列留空。如果你的字段允许为0,可调整判断条件为仅检查!empty()。 - 简化输出:使用三元运算符精简条件判断的代码,让逻辑更清晰。
内容的提问来源于stack exchange,提问作者Damian
相关产品推荐
相关产品推荐

