Php 保护wordpress-如何使用wodb->;prepare()函数
我用Php 保护wordpress-如何使用wodb->;prepare()函数,php,wordpress,function,sql-injection,Php,Wordpress,Function,Sql Injection,我用$wpdb->prepare设置了下面的sql。当前,此查询在函数中运行,所有变量都从wordpress中的my page.php文件传递给函数。下面的查询有效。然而,我的问题是,我是否需要对$field1、prepare(“选择不同的wp\u eva\u地理区域。$field1,wp\u eva\u地理区域。$field2 来自wp_eva_geography 其中wp_eva_geography.$field3=%s和wp_eva_geography.$field4=%s“,$type,
$wpdb->prepare
设置了下面的sql。当前,此查询在函数中运行,所有变量都从wordpress中的my page.php文件传递给函数。下面的查询有效。然而,我的问题是,我是否需要对$field1、
等变量使用%s
。。。如果有人能帮助我如何设置它,当我尝试时它不起作用。如果没有,有人能告诉我为什么没有吗?谢谢大家!
$query=$wpdb->prepare(“选择不同的wp\u eva\u地理区域。$field1,wp\u eva\u地理区域。$field2
来自wp_eva_geography
其中wp_eva_geography.$field3=%s和wp_eva_geography.$field4=%s“,$type,$geo_no_dash);
$results=$wpdb->get_results($query)
使用参考文档了解其工作原理
在您的特定情况下,只需回显MySQL查询字符串,您就可以看到它实际试图请求什么。然后,您可以发现是否出现了错误,例如错误的列名或值条目
谢谢你提出的回复我的sql的建议。我发现它是这样的:
选择不同的wp\u eva\u geography.'country\u short',wp\u eva\u geography.country\u slug
因此,当我将%s作为字段名时,它会添加开始和结束的单引号。有没有办法防止单引号?就个人而言,我不会将列名作为变量,我宁愿在实际查询中看到它们,否则请求的作用就不太清楚了。根据我的经验,我只将值传递到SQL查询中。
$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 );
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $wpdb->postmeta
WHERE post_id = %d
AND meta_key = %s",
13, 'gargle'
)
);