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
相关产品推荐
相关产品推荐

