在WordPress中如何使用带LIKE条件的$wpdb->prepare()函数进行模糊查询?

在WordPress中如何使用带LIKE条件的$wpdb->prepare()函数进行模糊查询?

在WordPress中如何使用带LIKE条件的$wpdb->prepare()函数进行模糊查询?

导语:我们使用$wpdb->prepare()是为了提高安全性,那么有时会遇到需要使用LIKE条件的时候,这时你会发现%s%d和LIKE本身的规则%符号冲突了,那么怎么办?来看看解决办法。

正常的LIKE条件中的%符号

在WordPress中一条正常使用的SQL语句,是这样使用LIKE条件的:

$querystr = "SELECT * FROM `table`  ";
$querystr .="WHERE  name like '例子%' ";
$querystr .="ORDER BY name LIMIT 5";
$results = $wpdb->get_results($querystr);

正常使用$wpdb->prepare()函数

我们来看看正常不用LIKE条件的$wpdb->prepare()函数:

$querystr = "SELECT * FROM `table`  ";
$querystr .="WHERE  name = '%s' ";
$querystr .="ORDER BY name LIMIT 5";
$results = $wpdb->get_results($wpdb->prepare($querystr,$name));

%s的值通过$wpdb->prepare()函数中的变量$name来获得。

在$wpdb->prepare()使用LIKE条件

我们要进行搜索以“例子”开头的所有字符串,正常情况下是这样写的 name like '例子%',但是在$wpdb->prepare()函数中,为了安全,它使用了通配符%s来代替你要查询的变量字符串,那么有些同学会写成 name like '%s%' 。

但这样子是错误的写法,这样的写法是查不出结果来的。

正确的方法是把你的条件变量字符串 和 %符号链接起来,形成一个新的变量字符串,然后再在$wpdb->prepare()函数中使用,例如 $name.'%'。下面是全部的语句。

$name="例子";

$querystr = "SELECT * FROM `table`  ";
$querystr .="WHERE  name like '%s' ";
$querystr .="ORDER BY name LIMIT 5";
$results = $wpdb->get_results($wpdb->prepare($querystr,$name.'%'));

这段语句的重点就是 $name.'%' 。

如果你要搜索以“例子” 结尾的所有字符串,那就是 '%'.$name。

如果你要搜索在任何位置包含“例子”的所有字符串,那就是'%'.$name.'%'。

结束

你明白了吗?%符号应该是$wpdb->prepare()中要替换的变量的一部分,而不是放入查询语句字符串内。

编辑 杨

我们是一群WordPress的爱好者,爱它的简单快捷,爱它的变化多样。

或许您还喜欢下面的文章

留下一条回复

关闭