【问题标题】:MySql error : Result consisted of more than one rowMySql 错误:结果包含多于一行
【发布时间】:2023-03-21 18:40:01
【问题描述】:

我有错误:Result consisted of more than one row but i can't find out it.

条目 id_user 在其表中只有一条记录。

程序:

CREATE DEFINER=`root`@`localhost` PROCEDURE `delete_user_deep`(id_user int(11))
BEGIN

declare nome_loc varchar(45);
declare cognome_loc varchar(45);

select nome,cognome
into nome_loc,cognome_loc
from user
where id_user=id_user;

delete from Radius.radcheck where username in (
    select mac_address from machine where id_user =id_user);

delete from Radius.radreply where username in (
    select mac_address from machine where id_user =id_user);

delete from machine_ip where id_machine in (
    select id_machine from machine where id_user=id_user);

delete from machine where id_user = id_user;

delete from document where id_user=id_user;

delete from user where id_user=id_user;

insert into log_generic values(
                    NULL,
                    'USER',
                    'Delete User Deep',
                    (select concat ('User: ',id_user,' Name: ',cognome_loc,' Prename: ',nome_loc)),
                    now());

END

【问题讨论】:

  • 这是 MySQL 代码,所以我要删除 sql-server 标记。
  • 检查select concat ('User: ',id_user,' Name: ',cognome_loc,' Prename: ',nome_loc)
  • 如果我去那里,我不会从这里开始。

标签: php mysql sql


【解决方案1】:

问题出在这句话中:

select nome,cognome
into nome_loc,cognome_loc
from user
where id_user=id_user;

如果多于一行,这将返回错误。错误记录在here

这是因为参数名与列名相同造成的。 id_user 指的是比较两边的列。

查询应如下所示:

select nome, cognome
into nome_loc, cognome_loc
from user
where id_user = param_id_user;

总是为参数和变量名添加前缀以区别于列名。

【讨论】:

  • 是的,戈登,我检查了它,我发现了这个问题,我将 id_user 替换为 id_user_in 并且它有效!非常感谢
猜你喜欢
  • 2012-03-19
  • 1970-01-01
  • 2014-11-30
  • 1970-01-01
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
相关资源
最近更新 更多