0

基本上,表的设置是这样的:

+-----------+----------+-------------+
|   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在用逗号分隔的值中使用以匹配至少一项。

4

2 回答 2

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$");
于 2012-07-26T12:27:48.653 回答
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正确检查多个语句。

于 2012-07-26T12:29:46.477 回答