为什么 MySQL 查询(/存储过程)中的 WHERE 子句返回不需要的数据?
Why is WHERE clause in MySQL query (/stored procedure) returning unwanted data?
我有一个 table,引号,以 UserID 作为主键。我想通过基于 UserID 的查询来隔离用户特定的数据。但是,当我在 table 中查询与特定 UserID 匹配的行时,将 returned 与给定 ID 不匹配的行。这里有人知道为什么吗?
我尝试用 MATCH(UserID) AGAINST(USERID) 重写查询,但是 returned 错误 1210:MATCH 的参数不正确,我觉得我可能正朝着错误的方向前进。
这是我引用的 table 脚本:
DROP TABLE IF EXISTS quotes;
CREATE TABLE quotes (
UserID varchar(255) NOT NULL,
Gallons decimal(10,0) NOT NULL,
Date varchar(50) NOT NULL,
Address varchar(255) NOT NULL,
InState tinyint DEFAULT NULL,
ppg decimal(10,0) GENERATED ALWAYS AS (if(InState,3,5)) STORED,
Total decimal(10,0) GENERATED ALWAYS AS ((Gallons * ppg)) STORED,
FullName varchar(101) NOT NULL,
KEY UserID (UserID),
CONSTRAINT quotes_ibfk_1 FOREIGN KEY (UserID) REFERENCES users (UserID)
)
这是我查询报价的存储过程 table:
CREATE DEFINER=`root`@`localhost` PROCEDURE `quoteGet`
(
IN USERID varchar(255)
)
BEGIN
SELECT * FROM QUOTES WHERE UserID = USERID;
END
mySQL 发现与 return 足够相等的两个用户 ID 是 'ddb22baa90894e24e1d53c186e203eba'
和
'cde6a2f820a251817cd62c5ca3f322ae'
。我用后者调用了存储过程,它 return 编辑了前者的条目和后者的条目。
应重命名参数:
CREATE DEFINER=`root`@`localhost` PROCEDURE `quoteGet`
(
IN P_USERID varchar(255)
)
BEGIN
SELECT * FROM QUOTES WHERE UserID = P_USERID;
END
在当前设置中 UserId = USERID
被视为 1=1
。
我有一个 table,引号,以 UserID 作为主键。我想通过基于 UserID 的查询来隔离用户特定的数据。但是,当我在 table 中查询与特定 UserID 匹配的行时,将 returned 与给定 ID 不匹配的行。这里有人知道为什么吗?
我尝试用 MATCH(UserID) AGAINST(USERID) 重写查询,但是 returned 错误 1210:MATCH 的参数不正确,我觉得我可能正朝着错误的方向前进。
这是我引用的 table 脚本:
DROP TABLE IF EXISTS quotes;
CREATE TABLE quotes (
UserID varchar(255) NOT NULL,
Gallons decimal(10,0) NOT NULL,
Date varchar(50) NOT NULL,
Address varchar(255) NOT NULL,
InState tinyint DEFAULT NULL,
ppg decimal(10,0) GENERATED ALWAYS AS (if(InState,3,5)) STORED,
Total decimal(10,0) GENERATED ALWAYS AS ((Gallons * ppg)) STORED,
FullName varchar(101) NOT NULL,
KEY UserID (UserID),
CONSTRAINT quotes_ibfk_1 FOREIGN KEY (UserID) REFERENCES users (UserID)
)
这是我查询报价的存储过程 table:
CREATE DEFINER=`root`@`localhost` PROCEDURE `quoteGet`
(
IN USERID varchar(255)
)
BEGIN
SELECT * FROM QUOTES WHERE UserID = USERID;
END
mySQL 发现与 return 足够相等的两个用户 ID 是 'ddb22baa90894e24e1d53c186e203eba'
和
'cde6a2f820a251817cd62c5ca3f322ae'
。我用后者调用了存储过程,它 return 编辑了前者的条目和后者的条目。
应重命名参数:
CREATE DEFINER=`root`@`localhost` PROCEDURE `quoteGet`
(
IN P_USERID varchar(255)
)
BEGIN
SELECT * FROM QUOTES WHERE UserID = P_USERID;
END
在当前设置中 UserId = USERID
被视为 1=1
。