这是我的程序。
debug("Doing something with {}", lazily(() -> some_expression_that_is_expensive));
当我尝试使用GetID('city','ny')执行存储过程时。我收到了一个错误
where子句中的未知列'ny'...
这里'city'是表名。有什么问题?
答案 0 :(得分:2)
假设name2是一个字符串参数,与传递的表的
在SQL中放置名称2的引号:
set @sel = concat('select id FROM ', tb, ' WHERE ename = ''', name2,'''');
通常建议不要使用字符串连接来构建SQL查询。由于您在查询中对列名进行了硬编码,因此提供表名"动态"是没有意义的。但是,如果必须,请使用QUOTE
正确转义并引用传递的字符串。
set @sel = concat('select id FROM ', tb, ' WHERE ename = ', quote(name2));
答案 1 :(得分:1)
永远不要将字符串直接连接到查询中。很糟糕,你没有通过表名,未经过无限制。这也需要修复,但对于您当前的问题,一个正确的解决方案是:
set @sel = concat( 'select id FROM ', tb, ' WHERE ename = ', QUOTE(name2));
QUOTE()
函数正确并安全地引用并转义参数,并正确处理空值...并在此处防止SQL注入漏洞。
请参阅https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_quote。