MySQL 存储过程 where 子句未过滤记录
MySQL stored procedure where clause is not filtering records
我正在使用一个数据库,其中的键都是二进制的 (16),基本上存储为一个 GUID,其中有几个值翻转。我有一个简单的存储过程,我想通过 ID 过滤掉一个。
delimiter //
create procedure select_item_by_id (
in id binary(16)
)
begin
select
`id`,
`name`
from
`item`
where
`id` = id;
end //
delimiter ;
当我这样触发它时,它会拉回 table 中的所有记录,不进行过滤:
call select_item_by_id(unhex('11e7deb1b1628696ad3894b2c0ab197a'));
但是,如果我 运行 手动...它会完全按照预期过滤记录:
select
`id`,
`name`
from
`item`
where
`id` = unhex('11e7deb1b1628696ad3894b2c0ab197a');
我什至尝试传入 string/chars 并在存储过程中执行 unhex,但结果为零:
delimiter //
create procedure select_item_by_id (
in id char(32)
)
begin
select
`id`,
`name`
from
`item`
where
`id` = unhex(id);
end //
delimiter ;
call select_item_by_id('11e7deb1b1628696ad3894b2c0ab197a');
很奇怪。我做错了什么?
重命名您的过程的参数:
create procedure select_item_by_id (
in idToTest char(32)
)
并使用
where
`id` = idToTest;
避免歧义。
很可能 WHERE id = id
总是评估为真,因为它可能正在检查该行的 id
是否等于其自身。将参数重命名为其他名称。
我正在使用一个数据库,其中的键都是二进制的 (16),基本上存储为一个 GUID,其中有几个值翻转。我有一个简单的存储过程,我想通过 ID 过滤掉一个。
delimiter //
create procedure select_item_by_id (
in id binary(16)
)
begin
select
`id`,
`name`
from
`item`
where
`id` = id;
end //
delimiter ;
当我这样触发它时,它会拉回 table 中的所有记录,不进行过滤:
call select_item_by_id(unhex('11e7deb1b1628696ad3894b2c0ab197a'));
但是,如果我 运行 手动...它会完全按照预期过滤记录:
select
`id`,
`name`
from
`item`
where
`id` = unhex('11e7deb1b1628696ad3894b2c0ab197a');
我什至尝试传入 string/chars 并在存储过程中执行 unhex,但结果为零:
delimiter //
create procedure select_item_by_id (
in id char(32)
)
begin
select
`id`,
`name`
from
`item`
where
`id` = unhex(id);
end //
delimiter ;
call select_item_by_id('11e7deb1b1628696ad3894b2c0ab197a');
很奇怪。我做错了什么?
重命名您的过程的参数:
create procedure select_item_by_id (
in idToTest char(32)
)
并使用
where
`id` = idToTest;
避免歧义。
很可能 WHERE id = id
总是评估为真,因为它可能正在检查该行的 id
是否等于其自身。将参数重命名为其他名称。