我的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'的行中。
请我用它来搜索整个字符串,而不仅仅是它的一部分。
谢谢。
答案 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
因此,这样的方法应该起作用(如果其他列也在表中也CHAR
,也将它们列为INT
)
$query_details= "SELECT *
FROM Purchases
WHERE CAST(sn AS CHAR) = '$phone'
OR sentto = '$phone'
OR batch= '$phone' ";