保护 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 REST API 对 LearnDash 中受保护数据的远程访问进行身份验证?