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

XMLHttpRequest传JS变量至PHP查询MySQL返回0问题排查

问题根因

传参失败是两个代码写法错误:

  • JS端var sentValue1 = Number;赋值错误,Number是JS内置类型构造函数,不是你要传递的具体业务数值;同时GET请求的参数不能放在send()方法中传递,你当前写法没有把参数附带到请求里,PHP端根本拿不到sentValue1的值,查询条件为空自然返回0。
  • 后端没有做参数合法性校验,拿到空值直接执行查询,没有抛出错误提示。
修正代码

前端JS部分

先给sentValue1赋你实际需要传递的游戏编号真实值,再把参数按照GET请求规范拼接到请求URL后,send()方法不需要传参:

<script>
function getGameNumberOfPlays() { 
   // 替换为你实际要查询的gameNumber值,示例为测试用的171
   var sentValue1 = 171;
   var xhttp = new XMLHttpRequest();
   xhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
         document.getElementById("gameNumberOfPlays").innerHTML = this.responseText;
      }
   };
   // GET请求参数拼接在URL末尾,格式为?参数名=参数值
   xhttp.open("GET", `numberOfPlays.php?sentValue1=${sentValue1}`, true);
   xhttp.send();
}
</script>

后端PHP部分

增加参数校验逻辑,拿到参数后转成整数类型,和数据库gameNumber的int字段类型匹配,避免空值、非法值传入:

<?php
$dbhost = 'localhost';
$dbuser = 'xxx'; 
$dbpwd  = 'xxx'; 
$dbname = 'xxx';

$conn = new mysqli($dbhost, $dbuser, $dbpwd, $dbname);

// 参数校验
if (!isset($_GET['sentValue1']) || !is_numeric($_GET['sentValue1'])) {
    echo "参数非法";
    exit;
}
$p1 = intval($_GET['sentValue1']);

$sql = "SELECT COUNT(ID) FROM `data` WHERE `gameNumber` = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param('i', $p1);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_array();
echo $user[0];
$conn->close();
?>
验证方式

改完后先直接在浏览器地址栏访问你的站点路径/numberOfPlays.php?sentValue1=171,如果能返回正确统计值,说明后端逻辑正常,再触发前端函数测试即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:48:19