MySQL 动态存储过程未返回正确结果 |可能的单引号不正确

问题描述 投票:0回答:1

我正在编写一个动态 MySQL 存储过程,它执行以下操作:在给定表 v_Tablename 中,如果 v_ColumnName 中等于 v_Value 的行数大于 0,则返回 true。否则,返回 false。

我怀疑问题可能是尝试为 v_Value 添加单引号,因为我在 v_ColumnName Email 中的 v_Tablename Employee 的数据库中添加了一个实例,其中 v_Value '[email protected]'。我预计运行此查询会产生 1 个结果。当我像这样在普通 SQL 中运行 SELECT 查询时:

SELECT COUNT(*) FROM Employee WHERE Email = '[email protected]';

这将返回 1 个结果(正确,符合预期)。

但是当我调用我的存储过程时:

CALL CheckValueExists('Employee', 'Email', '[email protected]', @result);
SELECT @result;

这将返回 0(不正确,不是预期的)。

我怀疑 v_Value 的单引号可能会导致此问题。这是我的代码:

create
    definer = root@localhost procedure CheckValueExists(
    IN v_Tablename VARCHAR(100),
    IN v_ColumnName VARCHAR(100),
    IN v_Value VARCHAR(100),
    OUT v_Exists BOOLEAN
)
BEGIN
  DECLARE v_Count INT;

  SET @query = CONCAT('SELECT COUNT(*) FROM ', v_Tablename,
                      ' WHERE ', v_ColumnName, ' = ?');

  SET @v_Value = CONCAT('', v_Value, '');

  PREPARE stat FROM @query;
  EXECUTE stat USING @v_Value;
  DEALLOCATE PREPARE stat;

  -- Get the count from the variable @count
  SELECT @count INTO v_Count;

  -- Set v_Exists based on the count
  IF v_Count > 0 THEN
    SET v_Exists = TRUE;
  ELSE
    SET v_Exists = FALSE;
  END IF;
END;

但即使我像 SET @v_Value = v_Value; 那样分配 v_Value;运行存储过程时我仍然得到 0 结果。有谁知道单引号是否会导致此问题,或者如果不是,存储过程未按预期运行的原因可能是什么? 预先感谢。

sql mysql stored-procedures
1个回答
0
投票

评论中的@Akina: 您无处将值分配给@count。尝试 .. CONCAT('SELECT COUNT(*) INTO @count FROM ', ..

© www.soinside.com 2019 - 2024. All rights reserved.