Wordpress:500 内部服务器错误,可能是使用 $wpdb 的问题

Posted

技术标签:

【中文标题】Wordpress:500 内部服务器错误,可能是使用 $wpdb 的问题【英文标题】:Wordpress: 500 Internal Server Error, probable issue using $wpdb 【发布时间】:2016-12-11 17:21:09 【问题描述】:

我正在使用 Wordpress,我正在执行一个查询,结果返回此错误:

加载资源失败:服务器响应状态为 500 (内部服务器错误)

我的查询如下:

global $wpdb;
        $session_uid = isset($_POST["session_uid"]) ? trim(strip_tags($_POST["session_uid"])) : "";
        $the_data = isset($_POST["the_data"]) ? trim(strip_tags($_POST["the_data"])) : "";
        $ss = "select * from ".$wpdb->prefix."vp_pms_messages inner join ".$wpdb->prefix."vp_pms_group_users on ".$wpdb->prefix."vp_pms_messages.id = ".$wpdb->prefix."vp_pms_group_users.message_id and ".$wpdb->prefix."vp_pms_messages.group_id = ".$wpdb->prefix."vp_pms_group_users.group_id where ".$wpdb->prefix."vp_pms_group_users.from_username = '$session_uid' and ".$wpdb->prefix."vp_pms_group_users.from_del = '0' or ".$wpdb->prefix."vp_pms_group_users.to_username = '$session_uid' and ".$wpdb->prefix."vp_pms_group_users.to_del = '0' group by ".$wpdb->prefix."vp_pms_messages.group_id";
        $check_last_conversation = $wpdb->get_results($ss);
        $response = print $check_last_conversation;

我可能遗漏或误解了某些内容,但如果我注释掉 $check_last_conversationprint 类似“Hello”的内容,错误就会消失。

没关系:

global $wpdb;
    $session_uid = isset($_POST["session_uid"]) ? trim(strip_tags($_POST["session_uid"])) : "";
    $the_data = isset($_POST["the_data"]) ? trim(strip_tags($_POST["the_data"])) : "";
    //$ss = "select * from ".$wpdb->prefix."vp_pms_messages inner join ".$wpdb->prefix."vp_pms_group_users on ".$wpdb->prefix."vp_pms_messages.id = ".$wpdb->prefix."vp_pms_group_users.message_id and ".$wpdb->prefix."vp_pms_messages.group_id = ".$wpdb->prefix."vp_pms_group_users.group_id where ".$wpdb->prefix."vp_pms_group_users.from_username = '$session_uid' and ".$wpdb->prefix."vp_pms_group_users.from_del = '0' or ".$wpdb->prefix."vp_pms_group_users.to_username = '$session_uid' and ".$wpdb->prefix."vp_pms_group_users.to_del = '0' group by ".$wpdb->prefix."vp_pms_messages.group_id";
    //$check_last_conversation = $wpdb->get_results($ss);
    $response = print 'hello';

所以我想我是如何编写查询的。

$ss = "select * from ".$wpdb->prefix."vp_pms_messages inner join ".$wpdb->prefix."vp_pms_group_users on ".$wpdb->prefix."vp_pms_messages.id = ".$wpdb->prefix."vp_pms_group_users.message_id and ".$wpdb->prefix."vp_pms_messages.group_id = ".$wpdb->prefix."vp_pms_group_users.group_id where ".$wpdb->prefix."vp_pms_group_users.from_username = '$session_uid' and ".$wpdb->prefix."vp_pms_group_users.from_del = '0' or ".$wpdb->prefix."vp_pms_group_users.to_username = '$session_uid' and ".$wpdb->prefix."vp_pms_group_users.to_del = '0' group by ".$wpdb->prefix."vp_pms_messages.group_id";

这么说,我看不到错误。

我的apache_error.logmysql_error_log.err 不要报告任何事情 关于。 我的表现在是空的,但如果它们不打印任何内容,就会产生该错误。

你能推荐点什么吗?

编辑

我在控制台中看到此错误

MySQL 表为空

我的 Wordpress 调试处于活动状态:

我的debug.log 文件(wp-content)在我的代码中没有显示任何错误。


我发现我的查询的同一个文件中有一个致命错误:

php 致命错误:调用未定义函数get_bloginfo()

我可以通过服务器 php 错误日志来检查它。在 MAMP 上工作,您可以在这里找到它:

MAMP/logs/php_error.log

就我而言,Wordpress 没有在 wp-content/debug.log 中报告它。所以你知道。我得出的结论是,我的 file.php 无法识别 wordpress 钩子,并且在整个查询过程中也可能发生在 $wpdb 上。

【问题讨论】:

$response = print $check_last_conversation;更改为print_r$check_last_conversation); @ArshSingh 试过但没有!我也一样。 在下面阅读我的答案。 你得到的结果在数组中。使用 json_encode() 可能会解决问题。 你检查过你的服务器错误日志吗? 【参考方案1】:

有点像 Ajit 的回答。我也遇到了类似的问题,这是由字符排序引起的,通过添加一行来修复。

在使用 wpdb 的任何 php 外部文件的顶部,我使用的是以下内容:

$path = $_SERVER['DOCUMENT_ROOT'];
include_once $path . '/wp-load.php';
global $wpdb;
$charset_collate = $wpdb->get_charset_collate();

然后您可以在 sql 语句中使用 $charset_collat​​e,例如

$sql = "CREATE TABLE `$wpdb->base_prefixmy_nice_table` (
      id MEDIUMINT NOT NULL AUTO_INCREMENT,
      PRIMARY KEY  (id)
    ) $charset_collate;";

希望有帮助!

【讨论】:

【参考方案2】:

正如 OP 提到的,他正在处理外部 wordpress 脚本并且无法访问他的 wordpress 功能。为确保您在外部文件中保留 wordpress 功能,请将以下代码放在外部脚本页面的开头。

$path = $_SERVER['DOCUMENT_ROOT']; 
include_once $path . '/wp-load.php';

以上行将包含您脚本的所有 wordpress 功能。 $path 变量存储你的wordpress安装文件夹的路径。

【讨论】:

【参考方案3】:

在开发过程中始终打开错误报告以了解warningsnoticefatal errors,如果您忘记某事或错过某事,这很容易发生。所以最好注意或错误并打开错误报告以查看错误,并在生产时禁用错误报告。

进入 wp-config.php 文件并搜索:define('WP_DEBUG',false); 并将其更改为 define('WP_DEBUG',true); >

即使您的查询没问题,您仍然会导致错误,这是由于数组打印不正确而导致的:

function get_results of $wpdb 是一个函数,它将返回一个数组作为多行的结果,并用于转储它:

print_r($check_last_conversation);

var_dump($check_last_conversation); 

print 'hello; 有效,因为它是一个字符串,而$check_last_conversation 是一个数组。不要将 print_rvar_dumpprintecho 包装在变量中。因为他们应该从变量中打印数据。

所以如果您有更多错误,您可以通过打开错误报告来查看错误。

【讨论】:

我已经尝试了你所建议的一切,我什至使用查询监视器来检查我所有的 php 警告和问题,但没有!我有点迷路了。 请打开错误报告并将您收到的错误发布在屏幕上。按照我的回答中关于在 wordpress 中打开调试的指南 @XiLab 请打开调试,该错误表示您的代码有问题,但是有什么问题,当您打开调试时,我们可以知道,通过进入:wp-config.php文件 好的,但是我的 debug.log 是空的!我不知道如何以及在哪里检查更多。我的意思是我通过 define('WP_DEBUG_LOG', true); 注册错误;而我什么都没有!我可以发布,但它是空的。 @XiLab 不是 define('WP_DEBUG_LOG', true); 更改 define('WP_DEBUG', true);

以上是关于Wordpress:500 内部服务器错误,可能是使用 $wpdb 的问题的主要内容,如果未能解决你的问题,请参考以下文章

XAMPP + Wordpress:500 内部服务器错误

在服务器上创建一个子域,给出500内部错误

WordPress 安装插件导致 HTTP 500 内部服务器错误的问题

Wordpress 仪表板登录内部 500 错误

php 升级到 7.2(Wordpress/Virtualmin)后出现错误 500

HTTP 500 内部服务器错误怎么办?