如何在mysql程序中处理where子句?

时间:2017-02-27 21:30:11

标签: mysql

这是我的程序。

debug("Doing something with {}", lazily(() -> some_expression_that_is_expensive));

当我尝试使用GetID('city','ny')执行存储过程时。我收到了一个错误

  

where子句中的未知列'ny'...

这里'city'是表名。有什么问题?

2 个答案:

答案 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