Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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错误代码1175_Mysql - Fatal编程技术网

尝试更新存储过程内部时出现MySQL错误代码1175

尝试更新存储过程内部时出现MySQL错误代码1175,mysql,Mysql,我正在创建一个存储过程,以根据记录id更新表记录。下面是我的代码(更新部分中的值仅为测试而硬编码): 当我调用以下程序时: call paisanos_new.destination_update('zzz', 'a', 0, 'a', 2); 我得到以下错误: 错误代码:1175。您正在使用安全更新模式,并且您试图更新一个不带WHERE的表,该表使用键列禁用安全模式,请在“首选项”->“SQL编辑器”中切换该选项,然后重新连接 但是,当我只执行更新查询时,它工作得很好 我已尝试禁用SQL\u

我正在创建一个存储过程,以根据记录id更新表记录。下面是我的代码(更新部分中的值仅为测试而硬编码):

当我调用以下程序时:

call paisanos_new.destination_update('zzz', 'a', 0, 'a', 2);
我得到以下错误:

错误代码:1175。您正在使用安全更新模式,并且您试图更新一个不带WHERE的表,该表使用键列禁用安全模式,请在“首选项”->“SQL编辑器”中切换该选项,然后重新连接

但是,当我只执行更新查询时,它工作得很好

我已尝试禁用SQL\u SAFE\u更新,但当我运行存储过程时,它会更新我的所有表记录!就好像我没有主键的where子句一样


有什么想法吗?

将存储过程中的参数命名为与列不同的名称。我猜这将返回一个错误:

CREATE DEFINER=`root`@`localhost` PROCEDURE `destination_update`(
 IN in_destination_id char(3),
 IN in_destination_name varchar(250),
 IN in_is_office tinyint(1),
 IN in_address varchar(250),
 IN in_status_id int(11)
)
BEGIN
    UPDATE `paisanos_new`.`destinations` d
    SET `destination_name` = 'b',
         `is_office` = 0,
         `address` = 'b',
         `status_id` = 2
    WHERE d.`destination_id` = 'zzz';    
END;

也就是说,
WHERE
子句中的
destination\u id
可能引用的是输入参数,而不是列(我猜它不存在)。

仅执行更新查询时,它会起作用,因为它会在名为destination\u id的表中找到列

但是,在过程内部,考虑的目的地\u id是参数表中的一个,因此您的查询实际上如下所示:

UPDATE ... WHERE 'zzz' = 'zzz';

Wich与执行WHERE true相同,因此它会更新所有行。

谢谢,这正是问题所在,没有错误我知道:谢谢你的回答,这就是问题所在。当然我对它投了更高的票,但遗憾的是,我在这里没有声誉,所以它不算你
UPDATE ... WHERE 'zzz' = 'zzz';