Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL存储过程where子句不过滤记录_Mysql_Stored Procedures_Guid - Fatal编程技术网

MySQL存储过程where子句不过滤记录

MySQL存储过程where子句不过滤记录,mysql,stored-procedures,guid,Mysql,Stored Procedures,Guid,我正在使用一个数据库,其中的键都是二进制的(16),基本上存储为一个GUID,其中有几个值被翻转。我有一个简单的存储过程,我想通过ID过滤出一个单独的存储过程 delimiter // create procedure select_item_by_id ( in id binary(16) ) begin select `id`, `name` from `item` where `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 ;
当我这样启动它时,它会收回表中的所有记录,不进行过滤:

call select_item_by_id(unhex('11e7deb1b1628696ad3894b2c0ab197a'));
但是,如果我手动运行它…它会完全按照预期过滤记录:

select
    `id`,
    `name`
from
    `item`
where
    `id` = unhex('11e7deb1b1628696ad3894b2c0ab197a');
我甚至尝试传入字符串/字符,并在存储过程中执行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;

避免歧义。

重命名程序的参数:

create procedure select_item_by_id (
    in idToTest char(32)
)
和使用

    where
        `id` = idToTest;

为了避免歧义。

可能
其中id=id
总是计算为true,因为它可能检查行的
id
是否等于自身。将参数重命名为其他名称

很可能
其中id=id
总是计算为true,因为它可能检查行的
id
是否等于自身。将参数重命名为其他名称

在过程中重命名您的id参数,这样您的查询使用的参数就没有矛盾了…在过程中重命名您的id参数,这样您的查询使用的参数就没有矛盾了…呸!我觉得这是个蹩脚的东西。我是mysql新手,所以我假设
quoting
字段会处理这个问题。避免在代码中引入歧义是一个很好的做法,但不用担心!通常SQL语言会在查询中捕捉到歧义,但不总是在存储过程中。^^^^“结构化查询语言”是漫长的一天。通常会,但我来自mssql多年,在那里你可以摆脱这种事情。每天学习新的东西!呸!我觉得这是个蹩脚的东西。我是mysql新手,所以我假设
quoting
字段会处理这个问题。避免在代码中引入歧义是一个很好的做法,但不用担心!通常SQL语言会在查询中捕捉到歧义,但不总是在存储过程中。^^^^“结构化查询语言”是漫长的一天。通常会,但我来自mssql多年,在那里你可以摆脱这种事情。每天学习新的东西!谢谢你!!谢谢你!!