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_conversation
和 print
类似“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.log
和mysql_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_collate,例如
$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】:在开发过程中始终打开错误报告以了解warnings
notice
或fatal 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_r
或 var_dump
或 print
或 echo
包装在变量中。因为他们应该从变量中打印数据。
所以如果您有更多错误,您可以通过打开错误报告来查看错误。
【讨论】:
我已经尝试了你所建议的一切,我什至使用查询监视器来检查我所有的 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 的问题的主要内容,如果未能解决你的问题,请参考以下文章
WordPress 安装插件导致 HTTP 500 内部服务器错误的问题