一、背景
最近在做网站,想要在网页上显示数据库的字段,查了一下可以用Wordpress的短代码功能实现,并遇到“500 - 内部服务器错误"问题。
二、如何用短代码访问数据库?
下面用一个例子来说明,注意这里的数据表是在建立wordpress网站时的数据库,根据官方文档的说明,链接其他数据库也可以,但是需要另外配置链接信息(这个我还没试过)。
1.将下面这段代码插入到functions.php中(可以在服务器进入主题文件夹中打开,也可以直接在wp后台中外观-主题编辑-模板函数(functions.php)打开)
function showdata() {
global $wpdb;
//引用全局变量,并将变量$wpdb变为对象实例(原理不是很懂,但这个语句就直接将$wpdb变为类wpdb的对象实例),wpdb类定义在wp-inludes/wp-db
$fivesdrafts=$wpdb->get_results("select cal_name from caltech");
//调用$wpdb对象的get_results方法,括号内的参数可以是Mysql的任意指令,并将结果赋值给变量$fivesdrafts
//这里我用了"select 字段名 from 表名"查询表名中字段名的内容
foreach ( $fivesdrafts as $fivesdraft ) {
echo $fivesdraft->cal_name;
}
}
//短代码函数调用设置,第二个参数是段代码函数名,第一个参数是在文章中调用的函数名(可以与短代码函数名不一致);
//经过调用设置后在文章中输入[第一个参数名](此处为[showdata])即可调用段代码
add_shortcode('showdata', 'showdata');
2.在文章或页面中输入[showdata]发布后就可以显示相应字段
三、数据库访问出错处理
如果插入短代码后显示“500 - 内部服务器错误。 您查找的资源存在问题,因而无法显示。”,请不要着急,首先我们要先找到原因。
1.将网站的错误页面设置为返回详细错误信息。(设置步骤请[点击这里](https://blog.csdn.net/weixin_44588907/article/details/105369935))
2.按照错误信息提示,找到根源后再去解决问题。
这里举个例子,我在用短代码访问数据库的时候出现“ Call to a member function get_results() on null”翻译过来就是“调用成员函数get_results()时为null”的错误信息。然后我发现之前的get_results函数的参数(即Mysql命令)有问题:
(1)出现500错误的代码
$fivesdrafts = $wpdb->get_results(
"
SELECT cal_name
FROM $wpdb->caltech
WHERE cal_id='0'
"
);
(2)改动后正常显示的代码
$fivesdrafts=$wpdb->get_results("select cal_name from caltech");
原因就是之前用的参数是从官网demo直接搬过来的,可能是Mysql的版本不一致,也可能是内嵌的wpdb类没有考虑到其他数据表的查询,所以导致命令无法识别,改成你自己的数据库命令即可(可以在数据库终端先测试一下命令)。
四、参考文档
1.Wordpress官方参考文档(https://developer.wordpress.org/reference/classes/wpdb/#top)
2.mariaDB数据库常用命令(https://www.cnblogs.com/yunweibai/p/10885884.html)