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

求助:使用PHP将AJAX数据存入MySQL的代码问题及优化建议

问题修复与完整实现指南

先给你梳理下代码里的几个核心问题,然后直接上修正后的完整代码:

核心问题点

  1. 参数匹配错误:你JS里AJAX传的是entry.xxx这类键,但PHP里却试图获取player.GetVar("Slide1"),这完全不对应,根本拿不到数据。
  2. 过时的数据库扩展:mysql_*系列函数早就被废弃了,PHP 7+已经彻底移除,必须用mysqli或PDO。
  3. SQL语法错误:表名lo-test包含减号,需要用反引号包裹,否则会被当成运算符号。
  4. SQL注入风险:直接把用户参数拼进SQL里,很容易被注入攻击。
  5. JS语法错误:你的AJAX代码最后少了闭合的}和),运行会报错。

修正后的JavaScript代码

我把参数名简化成更清晰的命名,改用POST请求(比GET更安全),补全语法错误并增加了错误回调方便调试:

function Script2() {
    var player = GetPlayer();
    $.ajaxSetup({ cache: false });
    $.ajax({
        url: "data.php",
        type: "POST",
        data: {
            "username": player.GetVar("username"),
            "slide1": player.GetVar("Slide1"),
            "slide2": player.GetVar("slide2"),
            "slide3": player.GetVar("slide3"),
            "slide4": player.GetVar("slide4"),
            "slide5": player.GetVar("Slide5"),
            "slide6": player.GetVar("slide6")
        },
        dataType: "json",
        success: function (data) {
            processData(data);
            console.log("数据提交成功:", data);
        },
        error: function(xhr, status, error) {
            console.error("AJAX请求失败:", error);
        }
    });
}

修正后的PHP代码(使用mysqli预处理)

这里改用mysqli扩展,用预处理语句防止注入,正确获取POST参数,并且处理了连接和执行错误:

<?php
// 调试阶段开启错误提示,上线后可以关闭
error_reporting(E_ALL);
ini_set('display_errors', 1);

// 只处理POST请求
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 数据库配置
    $host = 'localhost';
    $dbUser = 'root';
    $dbPass = '';
    $dbName = 'lo-test';

    // 创建mysqli连接
    $conn = new mysqli($host, $dbUser, $dbPass, $dbName);

    // 检查连接是否成功
    if ($conn->connect_error) {
        die(json_encode(['status' => 'error', 'message' => '数据库连接失败: ' . $conn->connect_error]));
    }

    // 获取POST参数,用??处理参数不存在的情况
    $username = $_POST['username'] ?? '';
    $slide1 = $_POST['slide1'] ?? '';
    $slide2 = $_POST['slide2'] ?? '';
    $slide3 = $_POST['slide3'] ?? '';
    $slide4 = $_POST['slide4'] ?? '';
    $slide5 = $_POST['slide5'] ?? '';
    $slide6 = $_POST['slide6'] ?? '';

    // 预处理SQL语句,表名用反引号包裹
    $sql = "INSERT INTO `lo-test` (username, slide1, slide2, slide3, slide4, slide5, slide6) VALUES (?, ?, ?, ?, ?, ?, ?)";
    $stmt = $conn->prepare($sql);

    // 绑定参数,"sssssss"表示7个字符串类型参数,根据你的字段类型调整(比如i表示整数)
    $stmt->bind_param("sssssss", $username, $slide1, $slide2, $slide3, $slide4, $slide5, $slide6);

    // 执行并返回结果
    if ($stmt->execute()) {
        echo json_encode(['status' => 'success', 'message' => '数据已成功存入数据库']);
    } else {
        echo json_encode(['status' => 'error', 'message' => '数据保存失败: ' . $stmt->error]);
    }

    // 关闭资源
    $stmt->close();
    $conn->close();
} else {
    echo json_encode(['status' => 'error', 'message' => '请使用POST请求提交数据']);
}
?>

关键注意事项

  • 参数对应:JS里data对象的键(比如username、slide1)必须和PHP里$_POST获取的键完全一致,这是你之前拿不到数据的核心原因。
  • 表结构匹配:确保你的lo-test表存在username、slide1到slide6这些字段,字段类型要和你存储的数据匹配(比如字符串用VARCHAR,文本用TEXT)。
  • 安全问题:上线前记得关闭PHP的错误提示(把display_errors设为0),避免泄露敏感信息。
  • 调试技巧:可以用浏览器的开发者工具(Network标签)查看AJAX请求的参数和响应,快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:04:58