PHP GET请求第二个分支无响应,寻求排查解决方法
PHP代码中publisher分支无响应问题修复方案
问题描述
编写的PHP代码中,loadcat分支可正常运行,但publisher分支无响应,即使将该分支代码移出if else结构,依旧无法得到响应。代码如下:
<?php include('internet.php'); if(!empty($_GET['x'])){ $x = $_GET['x']; if($x=='loadcat'){ $cats = $pdo->prepare("SELECT * FROM categories ORDER BY category"); $cats->execute(); $cat = array(); if($cats->rowCount()>0){ while($c=$cats->fetch()){ array_push($cat,$c['category']); } } echo json_encode(array( 'status'=>1, 'cat'=>$cat )); }else if($x=='publisher'){ $userid = $_POST['publisher']; $user = $pdo->prepare("SELECT name,photo FROM users WHERE userid='$userid'"); $user->execute(); if($user->rowCount()==1){ $u = $user->fetch(); $photo = $u['photo']; $name = $u['name']; $uname = $userid; }else{ $photo = '/cd_blog/img/user404.png'; $name = '[Not Found]'; $uname = '[Not Found]'; } echo json_encode(array( 'status'=>1, 'photo'=>$photo, 'name'=>$name, 'uname'=>$uname )); } } ?>
排查与修复步骤
- 验证请求参数与方式
publisher分支依赖$_POST['publisher']参数,若请求为GET方式(如直接在浏览器地址栏访问),$_POST变量为空,会导致SQL语句异常。需确保请求为POST方法,且正确传递publisher参数。可在分支开头添加调试代码确认参数:var_dump($_POST); // 输出POST参数,确认publisher是否存在 - 修复SQL注入风险与语法错误
当前代码直接将$userid拼接进SQL语句,存在SQL注入风险,且若$userid含特殊字符会触发语法错误。改用PDO参数绑定:// 替换原SQL准备与执行代码 $user = $pdo->prepare("SELECT name,photo FROM users WHERE userid=?"); $user->execute([$userid]); - 开启错误调试
在代码开头添加错误显示配置,直接查看运行时报错:error_reporting(E_ALL); ini_set('display_errors', 1); - 检查PDO连接与错误模式
确认internet.php中的PDO连接是否正常,建议开启PDO异常模式,便于捕获连接或SQL执行错误:// 在PDO实例化后添加 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - 确认请求的x参数正确性
确保请求URL中包含x=publisher(如your_script.php?x=publisher),同时通过POST传递publisher参数。
内容的提问来源于stack exchange,提问作者Reyad Islam
相关产品推荐
相关产品推荐

