我很难搞清楚我是否应该在WordPress中对数据库查询使用$wpdb->prepare
来防止SQL注入等事情。
$wpdb Codex显示了一些使用$ wpdb-> prepare函数的示例,以及其他不使用它的示例。
此外,在StackOverflow上的this answer中,有人提到像$wpdb->insert
这样的函数与使用$wpdb->prepare
具有相同的安全级别。但是$wpdb
或$wpdb->get_var
等其他$wpdb->query
函数呢?
我应该何时使用$wpdb->prepare
,如果有的话?
我的一些(简化的)$wpdb
类和函数用法如下所示:
示例1: $wpdb->insert
$wpdb->insert(
'special_posts',
array(
'title' => $title,
'selftext_html' => $selftext_html,
'selftext' => $selftext,
),
array(
'%s',
'%s',
'%s',
)
);
示例2: $wpdb->get_results
$wpdb->get_results("SELECT * FROM special_posts WHERE selftext_html = '$value'");
示例3: $wpdb->get_var
$wpdb->get_var("SELECT title FROM special_posts ORDER BY id DESC LIMIT 1");
示例4: $wpdb->query
$wpdb->query('TRUNCATE TABLE special_posts');
答案 0 :(得分:1)
据我了解 - 那些拥有查询参数占位符的方法($wpdb->insert()
,$wpdb->update()
,$wpdb->delete()
)不需要$wpdb->prepare()
方法,而且已经安全了。
但其他人 - 那些没有占位符的人,需要额外的sql转义。