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

时间:2016-08-05 10:15:36

标签: php mysql wordpress mamp

我正在使用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没有报告任何内容 约。
  • 我的表现在是空的,但是如果它们没有打印产生错误,那么它就是空的。

你能建议吗?

修改

我在控制台中看到此错误

enter image description here

MySQL表空

enter image description here

我的Wordpress Debug处于活动状态,如:

enter image description here

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

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

  

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

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

  

MAMP /日志/ php_error.log

就我而言,Wordpress并未在wp-content/debug.log中报告。所以你知道。我得出的结论是,我的file.php不能识别wordpress钩子,并且在我的查询中也可能发生$ wpdb。

3 个答案:

答案 0 :(得分:1)

在开发过程中始终打开错误报告,以了解warnings noticefatal errors,如果您忘记或错过,这可能非常容易发生放点东西。因此,最好注意或错误并打开错误报告以查看错误,并在生产中确实禁用错误报告。

  

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

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

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

print_r($check_last_conversation);

var_dump($check_last_conversation); 

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

因此,如果您有更多错误,可以通过启用错误报告来查看错误。

答案 1 :(得分:0)

由于OP提到他正在研究外部wordpress脚本,并且无法访问他的wordpress功能。为确保您在外部文件中保留wordpress功能,请在外部脚本页面的开头添加以下代码。

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

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

答案 2 :(得分:0)

按照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_prefix}my_nice_table` (
      id MEDIUMINT NOT NULL AUTO_INCREMENT,
      PRIMARY KEY  (id)
    ) $charset_collate;";

希望有帮助!