在查询中带引号的预备语句

时间:2013-12-05 15:54:52

标签: java mysql jdbc

我正在编写一个准备好的语句,对于表名,我传递了用户获取的变量字符串。

这样可行,

String m_table_variable = "blah"; //从请求对象

获取

PreparedStatement ps = conn.prepareStatement("select * from "+m_table_variable+"");

虽然没有,但

PreparedStatement ps = conn.prepareStatement("select * from '+m_table_variable+'")

我在这里缺少什么琐事?

4 个答案:

答案 0 :(得分:1)

PreparedStatement ps = conn.prepareStatement("select * from " +m_table_variable)

试试这个

当然,如果m_table_variable是一个名为表的字符串

答案 1 :(得分:1)

您的问题非常简单,第一个示例将三个字符串连接起来,即"select * from ""blah"""

第二个示例使用一个字符串,字面上是"select * from '+m_table_variable+'",并且该变量不会连接到最终的String。就个人而言,我不会动态地允许将表名注入SQL语句,在SQL注入时读取。

答案 2 :(得分:0)

您的第一个甚至不会编译,您需要使用\“将引号插入字符串文字。

答案 3 :(得分:0)

您需要使用"从String中转义\,否则将无法编译。

PreparedStatement ps 
        = conn.prepareStatement("select * from \"m_table_variable\"");