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
相关产品推荐
相关产品推荐

