簡體   English   中英

使用准備好的語句從多列進行SQL查詢

[英]SQL query from multiple columns with prepared statement

我希望能夠在mysql表的大多數列中搜索並返回結果。 我考慮過使用myisam db和全文本搜索,但決定由於性能下降,最好還是堅持使用innodb。 我也曾短暫考慮過使用Solr之類的東西,但是在我的情況下,這樣的解決方案似乎有點過頭了。

我只是想將搜索功能添加到聯系信息數據庫中。 當用戶輸入“ Smith”時,我希望結果返回並顯示所有表行,其中名字,姓氏或什至地址包含單詞Smith等。

告訴我這是否是錯誤的方法,但是我決定使用這樣設置的標准SQL字符串:

SELECT * FROM contacts WHERE firstName LIKE ? OR lastName LIKE ? OR email LIKE ?

當然,實際的查詢字符串將比該示例長得多,因為它將包括表中的大多數列。

1)在查詢數據庫的安全性時,我更喜歡使用准備好的語句,但是當我將sql字符串設置為上面的方式時,代碼為每個?查找單獨的語句。 我怎樣才能重復相同的“贊”? 每列? 還是有一種類似於以下方法的設置方式:

SELECT * FROM contacts WHERE firstName, lastName, email LIKE ?

最初將字符串傳遞給preparestatement時,我將其用通配符(%)括起來。

2)我可以同時搜索VARCHAR和INT列嗎?

編輯:我最終只使用了Spring框架的一小部分,因此我可以使用命名參數。 不幸的是,JDBC沒有此功能。 這意味着在我的構建路徑中包括一小部分Spring框架,以便可以使用jdbc jar。 或者,我可以為查詢字符串中的每個參數傳遞一個搜索字符串,但這將導致丑陋/難以讀取代碼,並且我不想亂用相同的字符串,這就是為什么我選擇使用named參數。

不,你不能那樣做。 您需要按照第一個查詢的方式進行操作:

SELECT * FROM contacts WHERE firstName LIKE ? OR lastName LIKE ? OR email LIKE ?

暫無
暫無

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

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