``` esc_sql( string|array $data ) ``` [esc\_sql()](https://developer.wordpress.org/reference/functions/esc_sql/) 函数用于转义字符串或者数组,但是一般还是建议使用 [wpdb::prepare()](https://developer.wordpress.org/reference/classes/wpdb/prepare/),因为后者更安全些。 ## 使用范围 1. 在一些 IN 语句中 2. 字符串中包含‘%’百分号的查询 3. 比如LIKE 语句 ## 使用注意 使用该函数的时候,变量在SQL代码里面应该被单引号包括。如下 ``` <?php $name = esc_sql( $name ); $status = esc_sql( $status ); $wpdb->get_var( "SELECT something FROM table WHERE foo = '{$name}' and status = '{$status}'" ); //错误示范 //$wpdb->get_var( "SELECT something FROM table WHERE foo = {$name} and status = {$status}" ); ?> ``` ***** ``` wpdb::prepare( string $query, array|mixed $args ) ``` [wpdb::prepare()](https://developer.wordpress.org/reference/classes/wpdb/prepare/) 函数被用于安全的执行SQL查询,类似于PHP里面的sprintf()输出,变量在后,查询代码里面使用占位符。 ## 使用 可以在查询字符串中使用三种占位符:%d(整数)%f(浮动)%s(字符串),按照实际情况使用。 ``` $wpdb->query( $wpdb->prepare( "SELECT id FROM wp_posts WHERE id > %d AND `post_status` = %s", $min_id, $status ) ); ``` ## 使用注意 1. 占位符在查询里面不得使用任何符号包括,比如引号,括号等等 2. 查询字符串里面确实包含【%】的话,比如【LIKE查询】,改写为【%%】 3. 查询里面并不是所有都需要做占位符替换的,但是占位符和后置的变量数目必须一致 4. 后置变量可以是单独的几个,也可以用数组包围起来,但是不能混用