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

WordPress外部数据库查询PHP文件触发500错误求助

WordPress AJAX调用外部数据库时触发500错误排查

我在WordPress主题的functions.php中声明了外部数据库连接,代码如下:

function connect_recipes_db() {
    global $recipesdb;
    $recipesdb = new wpdb( 'usr', 'pass', 'dbname', 'localhost');
}
add_action('init', 'connect_recipes_db');

我开发的插件中使用以下代码执行查询,运行完全正常:

global $recipesdb;

$NDBNo = $_POST['NDBNo'];
$result = $recipesdb->get_results(
        "SELECT * FROM IngredientsTable WHERE NDB_No LIKE'$NDBNo%' ORDER BY NDB_No ASC");

现在我通过JavaScript的AJAX请求调用一个独立PHP文件,传递数据并期望返回数据库查询结果,AJAX请求已测试正常,但该PHP文件触发500错误。PHP文件代码如下:

<?php

if (isset($_POST['NDB_No'])) {

     $NDBNo = $_POST['NDB_No'];
    
    global $recipesdb;
    
    $result = $recipesdb->get_results(
"SELECT * FROM IngredientsTable WHERE NDB_No LIKE'$NDBNo%' ORDER BY NDB_No ASC");
if ( ! empty( $result ) ) {
        foreach($result as $row) {
       echo $row->NDB_No;
}
}
}

AJAX请求代码如下:

jQuery.ajax({
type: "POST",
url:themeurl+"/inc/insert-recipe-and-post.php",
data: "NDB_No="+NDB_No,
crossDomain: true,
cache: false,
beforeSend: function(){console.log('Connecting...');},
success: function(data){
alert(data);
}
});

可能的原因及解决方法

  • 未加载WordPress核心环境:独立PHP文件没有初始化WordPress环境,$recipesdb全局变量和wpdb类都未定义,直接调用会触发致命错误。需要在PHP文件开头引入WordPress加载文件:

    // 根据你的WordPress安装路径调整,确保路径正确
    require_once($_SERVER['DOCUMENT_ROOT'] . '/wp-load.php');
    
  • SQL语法风险与错误:直接拼接用户输入的$NDBNo到SQL语句中,既存在SQL注入风险,也可能因输入含特殊字符导致语法错误。改用wpdb的预处理语句:

    $result = $recipesdb->get_results(
        $recipesdb->prepare(
            "SELECT * FROM IngredientsTable WHERE NDB_No LIKE %s ORDER BY NDB_No ASC",
            $NDBNo . '%'
        )
    );
    
  • 路径与权限问题:如果wp-load.php的路径配置错误,会导致无法加载WordPress环境;另外服务器权限限制该PHP文件执行,也可能引发500错误,可检查文件权限与路径是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:20:22