第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用準(zhǔn)備語(yǔ)句的可變列名

使用準(zhǔn)備語(yǔ)句的可變列名

子衿沉夜 2019-07-04 17:49:20
使用準(zhǔn)備語(yǔ)句的可變列名我想知道是否存在使用準(zhǔn)備好的語(yǔ)句指定返回的列名。我正在使用MySQL和Java。當(dāng)我嘗試的時(shí)候:String columnNames="d,e,f"; //Actually from the user...String name = "some_table";  //From user...String query = "SELECT a,b,c,? FROM " + name + " WHERE d=?"; //...stmt = conn.prepareStatement(query);stmt.setString(1, columnNames);stmt.setString(2, "x");我得到這種類型的語(yǔ)句(在執(zhí)行之前打印)。SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'不過(guò),我希望看到:SELECT a,b,c,d,e,f FROM some_table WHERE d='x'我知道我不能像前面提到的那樣,對(duì)表名這樣做。這里,但我想知道是否有什么方法可以用于列名。如果沒(méi)有,那么我只需要嘗試并確保我清理了輸入,這樣它就不會(huì)導(dǎo)致SQL注入漏洞。
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊

這表明DB設(shè)計(jì)錯(cuò)誤。用戶不需要知道列名。創(chuàng)建一個(gè)包含這些“列名”的真正DB列,并將數(shù)據(jù)存儲(chǔ)在其中。

無(wú)論如何,不能將列名設(shè)置為PreparedStatement價(jià)值。只能設(shè)置列。價(jià)值PreparedStatement價(jià)值

如果您想繼續(xù)這個(gè)方向,您需要清理列名并自己連接/構(gòu)建SQL字符串。引用單獨(dú)的列名并使用String#replace()若要在列名中轉(zhuǎn)義相同的引號(hào),請(qǐng)執(zhí)行以下操作。


查看完整回答
反對(duì) 回復(fù) 2019-07-04
?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊

我認(rèn)為這種情況不能工作,因?yàn)闇?zhǔn)備好的語(yǔ)句的全部目的是防止用戶輸入未轉(zhuǎn)義的查詢位,所以您總是會(huì)引用或轉(zhuǎn)義文本。

如果要安全地影響查詢結(jié)構(gòu),則需要使用Java對(duì)此輸入進(jìn)行清理。


查看完整回答
反對(duì) 回復(fù) 2019-07-04
?
弒天下

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超8個(gè)贊

public void MethodName(String strFieldName1, String strFieldName2, String strTableName)

{

//Code to connect with database

String strSQLQuery=String.format("select %s, %s from %s", strFieldName, strFieldName2, strTableName);

st=conn.createStatement();

rs=st.executeQuery(strSQLQuery);

//rest code

}


查看完整回答
反對(duì) 回復(fù) 2019-07-04
  • 3 回答
  • 0 關(guān)注
  • 461 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)