esc_sql( string|array $data )
esc_sql() 函数用于转义字符串或者数组,但是一般还是建议使用 wpdb::prepare(),因为后者更安全些。
使用范围
- 在一些 IN 语句中
- 字符串中包含‘%’百分号的查询
- 比如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() 函数被用于安全的执行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
)
);
使用注意
- 占位符在查询里面不得使用任何符号包括,比如引号,括号等等
- 查询字符串里面确实包含【%】的话,比如【LIKE查询】,改写为【%%】
- 查询里面并不是所有都需要做占位符替换的,但是占位符和后置的变量数目必须一致
- 后置变量可以是单独的几个,也可以用数组包围起来,但是不能混用