如何通过jQuery向服务器PHP文件传参查询SQL数据库?
咱们先梳理下你的代码问题,然后一步步调整到能正常实现需求的状态:
核心问题:请求方式不匹配
你前端用的是$.getJSON(),这属于GET请求,但后端PHP里却用$_POST['idFacebook']来获取参数——这俩完全不兼容!GET请求的参数会附在URL后面,后端得用$_GET['idFacebook']才能拿到;如果想用POST,前端就得换成对应的请求方式。
严重安全隐患:SQL注入风险
你的PHP代码直接把用户传入的$idFacebook拼进SQL语句里,这是非常危险的操作,恶意用户很容易通过构造特殊参数来篡改你的数据库。必须用预处理语句来彻底解决这个问题。
修正后的完整代码示例
后端PHP代码(适配请求方式+防注入)
<?php include "db.php"; $data = array(); // 先判断参数是否存在,避免Undefined index报错 if(isset($_GET['idFacebook'])){ $idFacebook = $_GET['idFacebook']; // 使用mysqli预处理语句防止SQL注入 $stmt = $con->prepare("SELECT `gender` FROM `users` WHERE `idFacebook` = ?"); // "s"表示参数为字符串类型,若你的idFacebook是数字类型可改成"i" $stmt->bind_param("s", $idFacebook); $stmt->execute(); $result = $stmt->get_result(); while($row = $result->fetch_object()){ $data[] = $row; } $stmt->close(); } // 设置响应头为JSON格式,避免解析问题 header("Content-Type: application/json; charset=UTF-8"); echo json_encode($data); ?>
前端jQuery代码(保持GET请求,带错误处理)
$(document).ready(function() { var url = "http://xxxxxxxxx.com/calGetBackupJSON.php"; $.getJSON(url, {idFacebook: 11111111111}, function(result) { console.log(result); // 这里可以处理返回的结果,比如遍历输出gender $.each(result, function(index, item){ console.log("用户性别: " + item.gender); }); }) // 增加错误处理,方便调试请求失败的原因 .fail(function(jqXHR, textStatus, errorThrown) { console.error("请求出错: " + textStatus, errorThrown); }); });
如果想改用POST请求(更适合传递敏感参数),前端可以换成$.post():
$(document).ready(function() { var url = "http://xxxxxxxxx.com/calGetBackupJSON.php"; $.post(url, {idFacebook: 11111111111}, function(result) { console.log(result); // 处理结果逻辑 }, "json") // 指定返回数据类型为JSON .fail(function(jqXHR, textStatus, errorThrown) { console.error("请求出错: " + textStatus, errorThrown); }); });
对应的后端只需把$_GET['idFacebook']改成$_POST['idFacebook']即可,预处理部分不变。
额外注意事项
- 跨域问题:如果前端页面的域名和后端PHP的域名不一致,浏览器会阻止跨域请求。可以在PHP开头添加跨域头(生产环境建议指定具体域名,不要用
*):
header("Access-Control-Allow-Origin: *");
- 参数校验:后端可以增加对
idFacebook的格式校验,比如判断是否为有效数字/字符串,过滤非法内容,避免无效请求。
内容的提问来源于stack exchange,提问作者user2047141
相关产品推荐
相关产品推荐

