我很难弄清楚是否应该在 WordPress 中的数据库查询上使用 $wpdb->prepare
以防止 SQL 注入(inject)等情况。
$wpdb Codex显示了一些使用 $wpdb->prepare 函数的示例,以及其他未使用它的示例。
另外,在 this answer在 StackOverflow 上,有人提到 $wpdb->insert
等函数与使用 $wpdb->prepare
具有相同的安全级别。但是其他 $wpdb
函数(例如 $wpdb->get_var
或 $wpdb->query
)呢?
如果需要的话,我什么时候应该使用$wpdb->prepare
?
我的一些(简化的)$wpdb
类和函数用法如下所示:
示例 1: $wpdb->插入
$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');
最佳答案
据我了解 - 这些方法具有查询参数的占位符($wpdb->insert()
、$wpdb->update()
、$ wpdb->delete()
) 不需要 $wpdb->prepare()
方法,而且它们已经是安全的。
但是其他的 - 那些没有占位符,需要额外的 sql 转义。
关于php - 我什么时候应该使用 $wpdb->prepare(如果有的话)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37558506/