MySQL搜索不搜索整个字符串

时间:2019-03-18 22:41:03

标签: php mysql

我的mysql搜索不搜索整个字符串。我的查询

 $query_details= "SELECT * FROM Purchases WHERE sn= '$phone' OR sentto= 
'$phone' OR batch= '$phone' ";
$details= $offices->query($query_details) or die(mysqli_error($xxxx));
$row_details = mysqli_fetch_assoc($details);

当我搜索类似'19Pa5vP9MyGoYoaB23kRNsHGjaRvYUHD'的内容时,它会将我们的结果带到sn ='19'的行中。

请我用它来搜索整个字符串,而不仅仅是它的一部分。

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您的列定义为INT,那么MySQL也会尝试将比较字符串转换为整数。由于它以数字开头,因此MySQL将从字符串中提取所有前导数字(在本例中为19),将其转换为INT,然后进行比较。因此,您将获得返回sn = 19的行。例如:

SELECT 19 = '19c5bx'

输出

1 -- true

要解决此问题,请在比较之前将CAST的任何整数列设为CHAR,例如

SELECT CAST(19 AS CHAR) = '19c5bx'

输出

0 -- false

如果您想与整数而不是字符串进行比较,则仍然可以正常工作

SELECT CAST(19 AS CHAR) = 19

输出

1

Demo on dbfiddle

因此,这样的方法应该起作用(如果其他列也在表中也CHAR,也将它们列为INT

$query_details= "SELECT * 
                 FROM Purchases 
                 WHERE CAST(sn AS CHAR) = '$phone' 
                    OR sentto = '$phone' 
                    OR batch= '$phone' ";