2

这是我想要完成的伪(假)查询:

SELECT * FROM myTable
WHERE specific_field IS IN '{$stringPassedIn}'

然后在结果上,我想获取specific_field与传入的字符串匹配的行。

在做一些研究时,我发现有很多相反的情况,例如:

SELECT * FROM items WHERE items LIKE '%123456%'但这不是我要找的——我不相信。

这是真实世界的应用程序。在我的php代码中,我提取了一条错误消息。此错误消息包含特定的错误代码。我有一个代码表,我想将此错误字符串与之进行比较,然后返回包含字符串中确切错误代码的行(如上面的第一个查询)。所以我将整个短语传递给查询。如果这甚至是可能的或实际的?还是有更好的方法来实现这一点?

4

2 回答 2

3

您可以反转LIKE谓词:

SELECT * FROM myTable
WHERE '{$errorMessage}' LIKE CONCAT('%', errorCode, '%')

想想这个例子,下面的表达式将返回 true:

'error number 12345 has occurred' LIKE '%12345%'

小心对 $errorMessage 进行适当的转义,以防它包含特殊字符。或者更好的是,使用准备好的语句并将变量作为参数传递。

于 2013-11-12T19:22:08.490 回答
2

查看 MySQL字符串函数。你可以做类似的事情

SELECT * FROM myTable
WHERE LOCATE(`specificField`, '{$stringPassedIn}') is not 0
于 2013-11-12T19:23:56.703 回答