我正在编写一个准备好的语句,对于表名,我传递了用户获取的变量字符串。
这样可行,
String m_table_variable = "blah";
//从请求对象
PreparedStatement ps = conn.prepareStatement("select * from "+m_table_variable+"");
虽然没有,但
PreparedStatement ps = conn.prepareStatement("select * from '+m_table_variable+'")
我在这里缺少什么琐事?
答案 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\"");