【发布时间】:2013-05-20 16:38:14
【问题描述】:
我正在为客户的网站编写一个灵活的搜索机制。我正在利用联合子句查询数据库中的许多不同字段,以搜索用户输入的字符串值。除了一个问题之外,这工作正常。
将文本字符串与当前设置为零的整数进行比较时,匹配始终返回 true。换句话说,根据 MySQL,“email@example.com”等于 0。
我尝试使用 CAST 和 CONVERT 函数将其转换为标准字符串到字符串比较,但我似乎无法正确使用语法。我的尝试要么重复上述问题,要么在某些应该匹配时根本不返回任何行。我还担心这样做会对性能产生影响,因为我正在合并许多工会。
我真正需要的是在输入的字符串和数据库中的值之间进行严格的比较,无论是整数还是字符串。
编辑: 这是一个例子。
CREATE TABLE `test_table` (
`id` INT NOT NULL AUTO_INCREMENT ,
`email` VARCHAR(255) NOT NULL ,
`phone` BIGINT(19) NOT NULL DEFAULT '0' ,
PRIMARY KEY (`id`) )
ENGINE = MyISAM;
INSERT INTO `test_table` (`id`, `email`, `phone`) VALUES (1, 'email@example.com', 0);
SELECT * FROM test_table WHERE phone = 'email@example.com';
执行此操作,将返回已插入的一行。我的问题是它不应该!
【问题讨论】:
-
如果您不显示代码,我们无法告诉您您做错了什么。通常您在调用
prepare()时指定要使用的数据类型(假设您使用的是准备好的语句,因为您应该避免 SQL 注入)。 -
我已经编辑了帖子以提供示例。在字符串到达查询之前,我正在处理 SQL 注入和其他安全措施。
-
在您的示例中,您将字符串与整数进行比较?
-
WHERE phone = 'email@example.com';电话字段是一个整数。它正在与一个字符串进行比较。
标签: mysql