我什么时候应该使用$ wpdb->准备,如果有的话?

时间:2016-06-01 02:36:05

标签: php mysql wordpress wpdb

我很难搞清楚我是否应该在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');

1 个答案:

答案 0 :(得分:1)

据我了解 - 那些拥有查询参数占位符的方法($wpdb->insert()$wpdb->update()$wpdb->delete())不需要$wpdb->prepare()方法,而且已经安全了。

但其他人 - 那些没有占位符的人,需要额外的sql转义。