基本上,表的设置是这样的:
+-----------+----------+-------------+
| land | city | perimeter |
+-----------+----------+-------------+
| America | Kansas | 1 |
| Britain | Berlin | 4 |
| Japan | Tokyo | 5 |
+-----------+----------+-------------+
我当前的查询:
$query = "SELECT land, city, perimeter FROM agents WHERE land LIKE ? OR city LIKE ? OR perimeter LIKE ?";
$params = array("%China%","%Kansas%","%6%");
此查询有效,将返回America,Kansas,1
。但是,如果我的params
等于:
$params = array("%China%","%Beijing,London,Kansas,Bali%","%6%");
这不会返回任何东西。如何在用逗号分隔的值中使用LIKE
,以便至少匹配这些逗号分隔值中的一个项目。
答案 0 :(得分:1)
而不是LIKE
使用REGEXP
(此处提供更多信息:http://dev.mysql.com/doc/refman/5.0/en/regexp.html)。
$query = "SELECT land, city, perimeter FROM agents
WHERE land REGEXP ? OR city REGEXP ? OR perimeter REGEXP ?";
$params = array("^China$","^Beijing|London|Kansas|Bali$","^6$");
答案 1 :(得分:0)
您无法传递逗号分隔值,并希望通过参数函数对它们进行正确分组。
您的查询返回:
SELECT land, city, perimeter FROM agents WHERE land LIKE 'China' OR city LIKE 'Beijing,London,Kansas,Bali' OR perimeter LIKE '6'
这显然不是你想要的。
您想要做的是通过类似if(count(explode(',', $myArray))>1)
的内容检查是否有任何参数是可爆炸的数组,以查看传递给查询的任何变量是否是包含多个字段的数组。如果是,则希望运行不同的查询字符串,以便正确检查多个or
语句。