[问题] 关于prepareStatement

楼主: jeff21115 (问苍天)   2016-10-01 10:03:05
各位大大 我想请问一下
用preparedStatement 可以把完整的sql指令当成一个参数传入吗?
例如
//sql为方法传入的参数 内容视为整的sql指令
PreparedStatement pstmt = null;
String sss = "?";
pstmt = con.prepareStatement(sss);
pstmt.setString(1,sql)
pstmt.executeQuery();
我试过这样写 程式会错误 网页开不起来 想请问一下 要怎么解决
作者: pttworld (批踢踢世界)   2016-10-01 10:40:00
未测试,猜测会认等于符号。至少是一定格式。
作者: qrtt1 (有些事,有时候。。。)   2016-10-01 11:52:00
没有 error message 是要大家观落阴吗@@?
作者: haha02 (来人!上夹棍!)   2016-10-01 14:35:00
我记得是不行他是需要driver支援的 不是单纯像String.format那种字串代换 不过也许有某套driver允许你这样搞 who knows
作者: ssccg (23)   2016-10-01 21:12:00
preparedstatement设定的参数,传到DB就会是单纯的资料而不会被当成sql解析,所以把完整的sql当参数传入是毫无意义preparedstatement就是把资料和sql分离,一般是要避免把资料直接组进sql,但是当然反过来sql放到资料也是不行的你把被认为有风险的程式贴来看看问题在哪才是真的你的sql是个固定字串?
作者: haha02 (来人!上夹棍!)   2016-10-01 22:14:00
SQL如果是有包含user敲的资料组出来的字串的话会有被SQLinject的风险 如果前面已经有先检核过输入排除风险关键字的话 也许可以写报告说这个问题另外防止掉了来结案或是这个方法都是执行不含user输入的SQL 那也解释的过去
作者: yoshilin (明明可以靠脸吃饭)   2016-10-01 23:06:00
execute改prepared应该算textbook很好找sample
作者: swpoker (swpoker)   2016-10-03 01:31:00
不行,要是可以的话就惨了

Links booklink

Contact Us: admin [ a t ] ucptt.com