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

通过JavaScript和PHP在WordPress数据库存整数高分遇500错误

问题排查与解决方案

核心问题1:PHP文件未加载WordPress环境

你的update-score.php直接被AJAX请求时,没有初始化WordPress核心环境,导致$wpdb全局变量根本不存在,这是触发500错误的主要原因。

核心问题2:SQL语法错误

你写的SQL语句里用单引号'包裹表名和字段名,MySQL中应该用反引号`(或无需包裹),单引号仅用于包裹字符串值,这会直接导致SQL执行失败。

修正后的完整代码

1. JavaScript代码(优化URL与请求标识)

function submitScore() {
    jQuery.ajax({
        url: '/wp-content/plugins/dinosaur-game/update-score.php',
        type: "POST",
        data: {
            score: this.highestScore,
            action: 'update_game_score' // 用于验证请求合法性
        },
        success: function(res) {
            console.log('分数更新结果:', res);
        },
        error: function(xhr) {
            console.log('更新失败,状态码:', xhr.status);
        }
    });                        
}

2. PHP代码(加载WordPress环境+安全更新)

<?php
// 加载WordPress核心,确保$wpdb可用,路径根据文件位置调整
require_once('../../../../wp-load.php');

// 验证请求合法性,防止非法调用
if (!isset($_POST['action']) || $_POST['action'] !== 'update_game_score') {
    wp_send_json_error('非法请求');
    exit;
}

global $wpdb;

// 过滤并验证分数,确保为有效正整数
$new_score = isset($_POST['score']) ? (int)$_POST['score'] : 0;
if ($new_score <= 0) {
    wp_send_json_error('无效分数');
    exit;
}

// 使用WordPress内置表名常量,适配不同数据库前缀
$table_name = $wpdb->users;
$data = array('game_score' => $new_score);
$where = array('ID' => 5);
// 指定字段类型,保证数据安全
$format = array('%d');
$where_format = array('%d');

// 用wpdb内置update方法,自动处理SQL转义
$result = $wpdb->update($table_name, $data, $where, $format, $where_format);

if ($result !== false) {
    wp_send_json_success('分数更新成功');
} else {
    wp_send_json_error('数据库更新失败');
}
?>

额外说明

  • 引入wp-load.php是为了初始化WordPress所有核心组件,包括数据库连接,这样$wpdb才能正常工作,路径需根据你的PHP文件实际位置调整。
  • 用$wpdb->users代替硬编码wp_users,适配不同站点的数据库前缀,避免兼容性问题。
  • 加入请求验证和数据过滤,既防止非法请求,也避免恶意数据注入数据库。
  • 用wp_send_json_success/error返回标准化JSON响应,方便JS端处理结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 21:40:27