事情是这样的:
SELECT IFNULL(v.col1 LIKE CONCAT('%','$userInput','%'),0) AS col1_match
, IFNULL(v.col2 LIKE CONCAT('%','$userInput','%'),0) AS col2_match
, IFNULL(v.col3 LIKE CONCAT('%','$userInput','%'),0) AS col3_match
, IFNULL(v.col4 LIKE CONCAT('%','$userInput','%'),0) AS col4_match
, v.*
FROM vw_clients v
WHERE v.col1 LIKE CONCAT('%','$userInput','%') = 1
OR v.col2 LIKE CONCAT('%','$userInput','%') = 1
OR v.col3 LIKE CONCAT('%','$userInput','%') = 1
OR v.col4 LIKE CONCAT('%','$userInput','%') = 1
注:这个构造容易受到SQL注入的影响;它取决于不包含SQL结构的$userInput
。例如
$userInput = "foo')=1 OR '1' LIKE CONCAT('1";
这不是全文搜索。这是旧的学校搜索与不正确的语法。 –
列值将包含前导和后缀'%'字符有点奇怪。它看起来像“=”比较运算符实际上是一个LIKE比较运算符。而且我还会包含必要的注意事项,这似乎很容易受到SQL注入的影响。 – spencer7593