【发布时间】:2019-11-01 02:51:10
【问题描述】:
我有一个存储过程,它可以根据与ColumnRule 匹配的输入参数来检索ColumnProperty。
例如,
我将执行以下操作以将ColumnProperty 作为字符串(短)。但问题是当使用WHERE过滤ColumnRule时,检索到的值是字符串,最后得到未知类型。
CALL `testing-spGetColumnType`('varchar(11)', @outputProperty);
select @outputProperty;
DELIMITER $$
CREATE PROCEDURE `testing-spGetColumnType`(IN pColumnType varchar(50),OUT pColumnProperty varchar(50))
BEGIN
SELECT ColumnProperty FROM model_column_type where pColumnType like replace(ColumnRule, 'variable', pColumnType) into pColumnProperty;
SELECT IFNULL(pColumnProperty,'unknown type') into pColumnProperty;
END$$
DELIMITER ;
样本表:
【问题讨论】:
-
它不会将
ColumnRule中的代码作为SQL表达式执行。它只是一个字符串,它与pColumnType匹配。 -
echoing Barmar:来自
ColumnRule列的值是一个值。字符串值看起来像 SQL 表达式并不重要。正如它在 SELECT 语句中所引用的那样,它只是字符的集合。为了得到一个解释为 SQL 文本的值(并打开一个潜在的巨大 SQL 注入漏洞),我们需要动态生成 SQL。我们可以将值 n 合并到一个字符串中,然后将字符串作为 SQL 语句执行,PREPARE、EXECUTE、DEALLOCATE ... MySQL 参考:dev.mysql.com/doc/refman/8.0/en/…
标签: mysql stored-procedures where-clause operator-keyword