gpt4 book ai didi

MySQL松散比较,在具有整数值的varchar字段上的WHERE产生意外结果

转载 作者:行者123 更新时间:2023-12-01 00:47:36 25 4
gpt4 key购买 nike

我最近在一个程序中发现了一个有趣的错误,它使用特定客户的私钥为他们选择数据。请考虑以下事项:

SELECT `id` FROM (`customers`) WHERE `authenticationKey` = '#09209!ko2A-' LIMIT 1

key 是在请求时提供的,并在查询之前进行了适当的过滤。但是,如果未能提供 key (应该在之前捕获;忽略它),将产生类似于以下的查询:

SELECT `id` FROM (`customers`) WHERE `authenticationKey` = 0 LIMIT 1

这会从 customers 表中返回一行 - 尽管它存储了一个正确的字符串键,例如在第一个示例中。

authenticationKey 字段的类型为 VARCHAR(1024)

我的猜测是这与松散比较有关。是什么导致了这个问题,如何正确避免?

最佳答案

MySQL 将尝试将数据强制转换为可比较的类型。在这种情况下,它会尝试将字符串转换为数字。它无法理解的任何字符串默认为 0。

select 0 = 'banana'

查看实际效果。

将您的查询与 '0' 而不是 0 进行比较可以解决问题。

Example SQLFiddle

关于MySQL松散比较,在具有整数值的varchar字段上的WHERE产生意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19895263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com