簡體   English   中英

SQL通配符問題

[英]SQL wildcard issue

我有一個數據庫,可以由我們的用戶通過界面進行修改。 對於一個字段(companyID),它們應該能夠在字符串中將星號作為通配符放置。

例如,他們可以使用G378 *來代表以G378開頭的任何公司ID。

現在,在我的客戶端程序中,我提供了一個“完整”的companyID作為參數:

SELECT * FROM table WHERE companyID = '" + myCompanyID + "'

但我必須檢查通配符,有什么我可以添加到我的查詢來檢查這一點。 我不確定如何解釋它,但它有點像我習慣的那樣倒退。 我可以修改我提供的值(完整的companyID)以匹配查詢本身中的通配符值嗎?

我希望這是一種感覺。

謝謝!

編輯:用戶沒有使用SELECT 用戶只使用INSERTUPDATE而THEY是將*放在字段中的用戶。 我的程序使用SELECT ,我只有完整的companyID(沒有星號)。

這是一個經典的SQL注入目標! 你應該很高興你現在找到它。

回到你的問題,當用戶輸入'*' ,將其替換為'%' ,並在查詢中使用LIKE而不是=

例如,當最終用戶輸入"US*123" ,請運行以下查詢:

SELECT * FROM table WHERE companyID LIKE @companyIdTemplate

@companyIdTemplate參數設置為"US%123" ,然后運行查詢。

我在示例中使用了.NET的@ ,但查詢參數以特定於您的托管語言的方式表示。 例如,他們成了? 在Java中。 檢查任何關於使用參數化查詢的DB編程教程,以了解它在系統中的完成情況。

編輯:如果您想基於指定另一個表中的記錄的通配符執行插入,您可以執行insert-from-select,如下所示:

INSERT INTO CompanyNotes (CompanyId, Note)
   SELECT c.companyId, @NoteText
   FROM Company c
   WHERE c.companyId LIKE 'G378%'

這將為具有ID匹配"G378%"每個公司將具有@NoteText參數值的記錄插入到CompanyNotes表中。

這在某種程度上依賴於實現,您沒有提到您正在處理的SQL類型。 但是,查看MS SQL Server通配符包括%(對於任意數量的字符)或_(對於單個字符)。 通配符僅在與“like”一起使用時才被評估為通配符,而不是= =。 但是你可以傳入一個包含通配符的參數,只要你使用“喜歡”就可以將它評估為通配符

在TSQL中我會使用replace和like。 即:

select * from table where companyid like replace(mycompanyid,'*','%');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM