当前位置:首页>WordPress建站>WordPress开发>如何与WordPress数据库正确交互

如何与WordPress数据库正确交互

WordPress 主题 CoreNext

有很多方法可以从WordPress数据库中检索数据,例如WP_Query、get_posts()、wp_get_post_terms() 等。建议使用WordPress自带函数进行数据库交互,因为它具有更好的性能,例如数据库缓存。但是,对于自定义数据库表,我们将需要使用$wpdb直接调用WordPress数据库数据

wpdb 类和 $wpdb 全局变量

WordPress定义了一个名为 wpdb 的类,其中包含一组用于与数据库进行交互的方法。其主要目的是提供与WordPress数据库的接口,也可用来与任何其他适当的数据库进行通信。

请不要直接调用wpdb类中的方法。WordPress定义了$wpdb全局变量,所以请直接调用该全局变量$wpdb的实例来操作数据库。 由于它是一个全局对象,因此我们可以使用全局声明在任何地方调用它。

global $wpdb;

$wpdb对象可以用来操作WordPress数据库中的每一个表,不仅仅是WordPress自动创建的基本表。例如,我们有一个自定义的表叫做mytable,那么可以使用如下语句来查询:

$myrows = $wpdb->get_results( "SELECT id, name FROM mytable" );

更多的介绍,可以阅读官方文档: https://codex.wordpress.org/Class_Reference/wpdb

以下是访问wpdb对象的示例:

$id = $_GET['id'];
$results = $wpdb->get_results( "SELECT * FROM $wpdb->property_listing WHERE ID =  $id" );

以上代码虽然可以正确获取到数据,但是具有SQL注入漏洞,因为此查询使访问者无需进行过滤检查即可直接与数据库进行交互,如果$_GET['id']是绝对数字,那没有问题,但是访问者可以在此处轻松添加恶意代码。

那么与WORDPRESS数据库进行交互的更好方法是什么呢?

$id = (int) $_GET['id'];
$results = $wpdb->get_results( "SELECT * FROM $wpdb->property_listing WHERE ID =  $id" );

上面的查询检查了$_GET['id'],相对安全,但仍然不建议使用。我们无需清理代码中的输入,因为WordPress使用prepare()函数可以提供更好的清理效果。

与WORDPRESS数据库进行交互的正确方法!

prepare()函数会进行几项检查,如果它不是一个整数(在我们的例子),那么它将调用名为函数mysql_real_escape_string() 。请注意,%d用于整数数据输入,%s用于字符串数据。

这是组合字符串和整数的示例:

$id = $_GET['id'];
$string = $_GET['location']; // 南美洲
$results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->property_listing WHERE ID = %d AND location = %s", $id, $string ) );

因此,每当我们需要直接与数据库进行交互时,请始终使用prepare()函数

目前,全世界排名前1000万的网站有33.4%是用WordPress搭建的,作为一名WordPress用户,我非常自豪。但是,这也使WordPress成为黑客最有针对性的攻击目标:为什么您的WordPress网站会容易被黑客攻击。所以,让我们从安全的层面上去编写我们的代码,让WordPress更加安全!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
欢迎关注WordPress大学公众号 WPDAXUE
WordPress开发商城相关

WooCommerce添加新字段到订单详情元数据框

2019-10-29 8:59:12

WordPress开发

成为合格的WordPress开发人员需要学习哪些知识?

2019-11-4 12:55:22

2 条回复 A文章作者 M管理员
  1. 小小小小条

    校长你好,我使用$wpdb对数据库进行了更新操作后,前端列表就不显示我更新的那条数据,是为什么呢

    • 倡萌

      不好意思,直接操作数据库是非常危险的,我不清楚你如何操作,也没有时间提供这方面的帮助

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索