[問題] 關於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