小编Eri*_*ver的帖子

准备好的语句执行,带有可变数量的要绑定的参数

我使用的一些存储过程需要根据是否提供了过程输入参数来插入 WHERE 条件。为了避免潜在的注入点,我想对将成为内插标准的一部分的值使用参数绑定。

由于添加到准备好的语句中的条件以及要绑定的参数数量可能因用户输入而异,因此我设计了以下方法来确定将哪些变量传递给 EXECUTE 语句。这有效,但似乎不优雅。

CREATE PROCEDURE foo (IN mandatory INT, IN optional INT, IN optional2 VARCHAR(20))
  BEGIN

    SELECT
      0, '', '', mandatory, optional, optional2
    INTO 
      @params, @sql, @where, @m, @o1, @o2;

    IF (@o1 > '' AND @o1 IS NOT NULL) THEN
      SET @where = CONCAT(@where, ' AND field = ?');
      SET @params = @params + 1;
    END IF;
    IF (@o2 > '' AND @o2 IS NOT NULL) THEN
      SET @where = CONCAT(@where, ' AND field2 = ?');
      SET …
Run Code Online (Sandbox Code Playgroud)

mysql stored-procedures dynamic-sql prepared-statement

6
推荐指数
1
解决办法
5558
查看次数