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

PHP MySQL根据当前文件切换SELECT查询语句的问题求助

修复你的SELECT查询切换问题

嘿,我一眼就看出问题所在了——你用来判断当前文件的file()函数完全用错了!

问题根源

file('index_cms.php')这个函数的作用是读取指定文件的内容到数组,只要这个文件在当前服务器的目录下存在,它就会返回一个非空数组(也就是布尔值true),根本不管当前运行的脚本是不是这个文件。这就导致第一个条件永远成立,elseif分支永远不会被执行。

修复方案

我们需要用正确的方式判断当前正在执行的脚本文件名,同时还要修复代码里的SQL注入风险(直接把$_GET参数拼进SQL是非常危险的行为):

<?php 
function select_cat(){ 
    // 获取当前执行脚本的文件名(用__FILE__魔术常量更可靠)
    $current_file = basename(__FILE__);
    
    if ($current_file === 'index_cms.php'){ 
        return "SELECT * FROM posts_anon"; 
    } elseif($current_file === 'category.php'){ 
        // 先对用户输入进行转义,避免SQL注入
        global $connexion;
        $safe_cat_name = mysqli_real_escape_string($connexion, $_GET['cat_name']);
        return "SELECT * FROM posts_anon WHERE category = '$safe_cat_name'"; 
    } 
    // 返回false比返回1更合理,方便后续判断查询是否有效
    return false; 
} 

// 调用函数并执行查询
$query = select_cat();
if ($query !== false) {
    $run_side = mysqli_query($connexion, $query);
} else {
    // 处理无效情况,比如输出错误提示
    echo "Invalid context for query";
}
?>

关键修改点

  • 替换判断逻辑:用basename(__FILE__)获取当前执行的文件名,和目标文件名精确比对,这才是判断当前脚本的正确方式
  • 修复SQL注入:用mysqli_real_escape_string()对$_GET['cat_name']进行转义,防止恶意用户输入破坏你的数据库
  • 优化返回值:把返回1改成返回false,这样后续可以判断函数是否返回了有效的SQL语句,避免执行无效查询

补充说明

如果你更倾向于用服务器全局变量判断,也可以用basename($_SERVER['PHP_SELF']),不过__FILE__是PHP内置的魔术常量,它直接指向当前执行脚本的真实路径,比$_SERVER变量更可靠(不会被前端请求篡改)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:50:50