MySQL查询以在表的任何字段中查找完全匹配

时间:2021-04-02 16:31:00

标签: php mysql

我在运行时用这个构建了一个 MySQL 查询

$search = "needle";
$sql = "SELECT * FROM myTable WHERE ( (1=0) ";
for($i=0; $i<count($names); ++$i) {
    $sql .= " OR (`{$names[$i]}` = '$search') ";
}
$sql .= ") ";

其中 names 是一个包含所有列名的数组。查询对我来说似乎很好:

SELECT * FROM myTable WHERE ( (1=0) OR (`img` = 'needle') OR (`title` = 'needle') OR (`name_en` = 'needle') OR (`caption_en` = 'needle') OR (`bottom_en` = 'needle') )

但问题是...它发现很多行即使没有这些行完全包含“needle”字符串。 其中一些包含它,但例如在文本字段的中间,但即使结果数量也没有意义。 103 个中只有 4 个包含针,但我得到了 60 行! 再一次,我期待零行,因为没有一个等于“针”。

我错过了什么愚蠢的东西吗?

1 个答案:

答案 0 :(得分:2)

根据上面的评论,发现表中的一列是整数。

将整数与字符串进行比较会导致将字符串映射到其整数值,即使用任何前导数字,而忽略非数字。如果没有前导数字,则搜索字符串的整数值为 0。

因此它将匹配整数列为 0 的任何行。

相关问题