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

PHP开发动物领养网站:修复查询动物时status=0也展示的问题

问题原因
  • get_animals函数的SQL查询逻辑存在条件覆盖问题:初始定义的WHERE status=1过滤规则,在传入$cat_id或者$animal_id参数时会被后续新赋值的查询语句完全覆盖,新查询没有携带status=1的限制,因此会查出所有状态的动物。
  • 代码同时存在SQL注入风险:直接将参数拼接进SQL语句的写法存在安全隐患。
修复方案

直接调整get_animals函数的查询拼接逻辑,保证status=1的基础过滤条件始终生效,不要被后续参数覆盖,修改后的代码如下:

function get_animals($cat_id='', $animal_id='')
{
    global $con;
    // 基础查询始终保留status=1的过滤
    $query = "SELECT * FROM animals WHERE status= 1";
    
    // 追加分类过滤条件,而非覆盖原有查询
    if($cat_id!='')
    {
        $cat_id = mysqli_real_escape_string($con, $cat_id);
        $query .= " AND category_name='$cat_id'";
    }
    
    // 追加ID过滤条件,而非覆盖原有查询
    if ($animal_id!='')
    {
        $animal_id = intval($animal_id);
        $query .= " AND id=$animal_id";
    }
    
    return mysqli_query($con,$query);
}

补充优化建议

如果要进一步提升安全性,建议使用mysqli预处理语句替代直接拼接SQL的写法,避免SQL注入风险。

内容的提问来源于stack exchange,提问作者Naive Gold

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:36:04