Android调用PHP执行带WHERE条件的MySQL SELECT查询失败求助
问题根因
- 参数接收方式不匹配:Android端将
ID参数拼接在URL路径后,属于GET请求的查询参数,你的PHP代码中使用$_POST['ID']无法获取到该参数值,导致$username为空,WHERE条件匹配不到任何数据,查询无结果返回。 - 预处理语句使用不规范:直接将变量拼接进SQL语句的写法存在SQL注入风险,也可能因为变量携带特殊字符触发SQL语法错误。
- 原有代码逻辑残缺:给出的代码片段遗漏了将查询到的单条数据推入结果数组、最终返回响应给Android端的逻辑。
修复方案
替换原有代码为以下内容:
// 改为用$_GET接收URL携带的参数,也可以用$_REQUEST兼容GET/POST两种请求方式 $username = $_GET['ID']; // 调试时可以先打开下方注释,确认参数是否正常拿到 // var_dump($username);exit; $heroes = array(); // 预处理SQL用?做占位符,不要直接拼接变量 $sql = "SELECT ID, LAHETTAJAID, VASTAANOTTAJAID, PURKUAIKA FROM AJOJARJESTELY WHERE KULJETTAJAID = ?"; $stmt = $conn->prepare($sql); // 绑定参数,s代表参数类型为字符串,如果ID是数字类型可以改为i $stmt->bind_param("s", $username); $stmt->execute(); $stmt->bind_result($ID, $LAHETTAJAID, $VASTAANOTTAJAID, $PURKUAIKA); while($stmt->fetch()){ $temp = [ 'id'=>$ID, 'l'=>$LAHETTAJAID, 'vastaanottaja'=>$VASTAANOTTAJAID, 'purkuaika'=>$PURKUAIKA ]; // 补全将单条数据推入结果数组的逻辑 array_push($heroes, $temp); } // 补全返回响应逻辑,将结果数组转为JSON返回给Android端 echo json_encode($heroes);
额外排查建议
如果修改后依然有问题,可以开启PHP错误提示,打印$stmt->error查看具体的SQL执行错误信息,也可以直接在浏览器访问测试地址/sqlphp/ajodbquery.php?ID=xxx(替换xxx为数据库中实际存在的KULJETTAJAID值),直接查看接口返回结果排查问题。
内容的提问来源于stack exchange,提问作者Heikki Turunen
相关产品推荐
相关产品推荐

