保护 wordpress - 如何使用 wodb->prepare() 函数

Posted

技术标签:

【中文标题】保护 wordpress - 如何使用 wodb->prepare() 函数【英文标题】:Protecting wordpress - How to used wodb->prepare() function 【发布时间】:2012-12-20 22:08:28 【问题描述】:

我用$wpdb->prepare 设置了下面的sql。目前这个查询是在一个函数中运行的,所有的变量都从我在 wordpress 中的 page.php 文件传递​​给函数。以下查询有效。但是我的问题是我是否需要在我的变量上使用%s $field1, $field2, 等...如果有人可以帮助我如何设置它,当我尝试时它不起作用。如果没有,有人能告诉我为什么不吗?谢谢!

$query = $wpdb->prepare("SELECT DISTINCT wp_eva_geography.$field1, wp_eva_geography.$field2 
FROM wp_eva_geography
WHERE wp_eva_geography.$field3=%s AND wp_eva_geography.$field4=%s",$type,$geo_no_dash);
$results = $wpdb->get_results( $query );

【问题讨论】:

【参考方案1】:

使用参考文档了解其工作原理。

在您的特定情况下,可能值得只回显 mysql 查询字符串,以便您可以看到它实际尝试请求的内容。然后您可以发现是否出现问题,例如错误的列名或值条目。

http://codex.wordpress.org/Class_Reference/wpdb

$wpdb->query( 
    $wpdb->prepare( 
        "DELETE FROM $wpdb->postmeta
         WHERE post_id = %d
          AND meta_key = %s",
         13, 'gargle' 
    )
);

【讨论】:

感谢回显我的 sql 的建议。我发现它看起来像这样: SELECT DISTINCT wp_eva_geography.'county_short', wp_eva_geography.county_slug 因此,当我将 %s 作为字段名称时,它会添加开始和结束单引号。有没有办法防止单引号? 我个人不会将列名作为变量,我宁愿在实际查询中看到它们,否则不太清楚请求的作用。根据我的经验,我只将值传递给 SQL 查询。

以上是关于保护 wordpress - 如何使用 wodb->prepare() 函数的主要内容,如果未能解决你的问题,请参考以下文章

简介如何去除WordPress主题版权保护的方法

对 wordpress 网站进行编码以保护代码(例如混淆)

如何:保护你的WordPress博客不受热链接的影响

如何通过 Wordpress REST API 对 LearnDash 中受保护数据的远程访问进行身份验证?

将 WordPress iOS 应用程序与受 Shibboleth 保护的 WordPress 配合使用

使用许可证密钥验证保护 wordpress 主题