WordPress网站中如何为插件自定义数据库表
作者:sdfqw4543gf | 来源:互联网 | 2014-05-27 15:25
当你写插件的时候,你可能需要写东西到数据库中去,一般来说,有两种数据要存储,第一种是安装数据,一般存储在wp_options表中,使用WordPress的options机制来实现。第二种是数据,可以存储到postmeta表或者usermeta表中。如果数据特别多,就需要单独
当你写插件的时候,你可能需要写东西到数据库中去,一般来说,有两种数据要存储,第一种是安装数据,一般存储在 wp_options
表中,使用 WordPress 的 options 机制来实现。第二种是数据,可以存储到 postmeta 表或者 usermeta
表中。如果数据特别多,就需要单独创建数据表了。这篇文章就讲讲如何在写插件时候创建数据表。
一般在写插件时候创建数据库有如下三个步骤:
创建一个添加新数据表的 PHP 函数。
保证插件启动的时候调用这个函数。
如果新版本有不同的数据表结构,创建一个升级函数。
今天我就以微信机器人 WordPress 插件高级版的
新功能:自定义文本回复,来讲解下这个过程,其中的第三步,由于没有数据库的升级不涉及。
创建一个添加新数据表的 PHP 函数
我们这个插件的安装函数叫做:weixin_robot_texts_crate_table。
1. 数据库表前缀
默认 WordPress 数据库标签前缀都是 wp_,但是有人如果在一个数据库安装两个及以上 WordPress,就需要在
wp-config.php设置
WordPress 数据库表前缀来区别,所以我们向 WordPress 数据库添加新表的时候,要先找找到数据库表前缀。我们可以在变量
$wpdb->prefix
找到。如下:
"language-php">global $wpdb;$table_name = $wpdb->prefix . "weixin_robot_texts";
2. 判断表是否存在
可以通过一条 SHOW TABLES SQL 查询来判断。
"language-php">if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name)
3. 创建数据表
这步就是实际来创建一个数据表了。我们这个表有5个字段,id 自定义文本回复的 ID。keyword
微信发送过来的关键字,reply 自定义回复,time
添加的时间,status是否启用,有时候只是不想暂时不想启用,而不是删除。
这里我不用直接的 SQL 查询来创建,而是使用在
wp-admin/upgrade-functions.php(我们需要加载该文件,默认是不会加载的)中的
dbDelta。dbDelta 函数会检查当前的表结构,和需要的表结构进行比较,所以无论添加或者修改表都会非常方便。关于具体怎样使用
dbDelta,详细可以看 wp-admin/upgrade-schema.php 中的例子。
"language-php"> $sql = "CREATE TABLE " . $tablename . " (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`keyword` varchar(255) CHARACTER SET utf8 NOT NULL,
`reply` text CHARACTER SET utf8 NOT NULL,
`status` int(1) NOT NULL DEFAULT '1',
`time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `keyword` (`keyword`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
最后这个 weixin_robot_texts_crate_table 函数为:
"11">function weixin_robot_texts_crate_table() {
global $wpdb;
$table_name = $wpdb->prefix . "weixin_robot_texts";
if($wpdb->get_var("show tables like '$table_name'") != $weixin_robot_texts_table)
{
$sql = "CREATE TABLE " . $table_name . " (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`keyword` varchar(255) CHARACTER SET utf8 NOT NULL,
`reply` text CHARACTER SET utf8 NOT NULL,
`status` int(1) NOT NULL DEFAULT '1',
`time` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `keyword` (`keyword`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql); }}
保证插件启动的时候调用创建数据表函数
我们使用 register_activation_hook 调用上面创建数据表的函数。
"language-php">register_activation_hook( __FILE__,'weixin_robot_texts_crate_table');
推荐阅读
-
本文探讨了在使用phpMyAdmin过程中遇到的mysqli_init()函数错误,并提供了有效的解决方案。 ...
[详细]
蜡笔小新 2024-12-04 17:35:56
-
本文探讨了在执行SQL查询时遇到的因字符集不同而导致查询结果差异的问题,特别是涉及中文字符时。文章分析了在不同字符集设置下,SQL查询结果的变化,并提供了详细的解决方案。 ...
[详细]
蜡笔小新 2024-12-04 16:39:13
-
-
一、数据更新操作DML语法中主要包括两个内容:查询与更新,更新主要包括:增加数据、修改数据、删除数据。其中这些操作是离不开查询的。1、增加数据语法:INSERTINTO表名称[(字 ...
[详细]
蜡笔小新 2024-12-04 12:15:42
-
本文深入探讨了SqliLabs项目中的第38至45关,重点讲解了堆叠注入(Stacked Queries)的应用技巧及防御策略。通过实际案例分析,帮助读者理解如何利用和防范此类SQL注入攻击。 ...
[详细]
蜡笔小新 2024-12-04 11:17:35
-
本文主要介绍了KKCMS的安装过程及其基本功能,重点分析了该系统中存在的验证码重用、SQL注入及XSS等安全问题。适合初学者作为入门指南。 ...
[详细]
蜡笔小新 2024-12-04 09:30:07
-
AIY计划由Google发起,旨在通过提供易于使用的工具包和技术支持,激发全球创客的创造力,推动人工智能技术的普及与创新。 ...
[详细]
蜡笔小新 2024-12-03 17:51:09
-
本文深入探讨了程序员与软件工程师之间的主要区别,包括它们的职业定位、技能要求以及工作内容等方面的不同,旨在帮助读者更好地理解这两个角色的特点。 ...
[详细]
蜡笔小新 2024-12-03 11:53:09
-
文|佘凯文来源|智能相对论(aixdlun)5月份,“大屏”市场又起风云,各大品牌不约而同地发布了自家新产品。5月26日 ...
[详细]
蜡笔小新 2024-12-03 10:37:37
-
蜡笔小新 2024-12-03 10:33:16
-
本文详细介绍了如何在微信小程序中配置pages、window、tabBar以及启用调试模式,帮助开发者更好地理解和应用这些配置选项。 ...
[详细]
蜡笔小新 2024-12-02 20:40:11
-
PHPFORMYSQL代码生成助手(根据Mysql里的字段自动生成类文件的)_PHP教程:根据Mysql里的字段自动生成类文件:但需要导入:require_once.dbez_sq ...
[详细]
蜡笔小新 2024-12-02 20:15:47
-
本文详细探讨了 Java 中 Daemon 线程的特点及其应用场景,并深入分析了 Random 类的源代码,帮助开发者更好地理解和使用这些核心组件。 ...
[详细]
蜡笔小新 2024-12-02 18:13:21
-
本文深入探讨了ThinkPHP框架中的文件缓存类实现,提供了详细的代码示例和使用说明,旨在帮助开发者更好地理解和利用这一功能来优化应用程序性能。 ...
[详细]
蜡笔小新 2024-12-02 17:26:54
-
Gitea是由Gogs社区分叉而来的开源自托管Git服务,旨在提供一个更加灵活和易于维护的解决方案。本文将详细介绍如何利用Docker容器技术快速部署Gitea。 ...
[详细]
蜡笔小新 2024-12-02 15:35:13
-
本文档详细规划了从基础到高级的软件测试学习路径,包括但不限于测试基础、Linux和数据库、功能测试、Python编程、接口测试、性能测试、金融项目实战、UI自动化测试等内容,旨在为初学者和进阶者提供全面的学习指导。 ...
[详细]
蜡笔小新 2024-12-01 12:44:17
-
sdfqw4543gf
这个家伙很懒,什么也没留下!