2011-09-15 197 views
0

我試圖在多列中查找可能包含某些字符的搜索,我有兩個問題。使用MySQL和PHPMySql查詢查找包含某些變量的列MySQL和PHP

1. 我已經找到了如何連接列並可以搜索類似的東西,但是我必須在它們中搜索很多東西。

SELECT * 
FROM sessions 
WHERE CONCAT(session_id, config_id, sessionDate, sessionLength, userEmail, clientEmail, emailSent, UDID, deviceLocation, company) 
LIKE "%"$sessionId"%" 

or 
WHERE CONCAT(session_id, config_id, sessionDate, sessionLength, userEmail, clientEmail, emailSent, UDID, deviceLocation, company) 
like "%"$clientId"%" 

or 
WHERE CONCAT(session_id, config_id, sessionDate, sessionLength, userEmail, clientEmail, emailSent, UDID, deviceLocation, company) 
like "%"$date"%" 

or 
WHERE CONCAT(session_id, config_id, sessionDate, sessionLength, userEmail, clientEmail, emailSent, UDID, deviceLocation, company) 
like "%"$email"%" 

or 
WHERE CONCAT(session_id, config_id, sessionDate, sessionLength, userEmail, clientEmail, emailSent, UDID, deviceLocation, company) 
like "%"$sessionId"%" 

2. 我不知道如果 「%」 $的sessionId 「%」 「%」 $的clientId 「%等。將工作一樣,可以隨意的東西,如」 %SNAKE%來代替它「%Solid%」,如果他們不像我認爲他們那樣工作,我該如何使用這些變量來做這件事。再次,這是在PHP

+1

在我看來,如果可能''sessionId'變量無論如何都不是'session_id'列,那麼對於一個糟糕的數據庫設計來說似乎是這樣。這種行爲是故意的嗎?聽起來很值得避免。這種方法只會變得混亂。 – Alex

+0

我正在分解搜索,人們輸入類似「be I 52 2001」的內容並將每個單詞存儲在一個變量中。所以sessionId可以等於「是」,並且電子郵件可以等於「52」。因此,我需要通過$ emailIdentifyd和session_Id來搜索userEmail。它們不是最終的變量名稱,它只是名稱的試用。 – Solid1Snake1

+0

更好的選擇(從數據庫的角度來看)將是確定每個搜索詞屬於哪個字段(例如,如果它可以被解析爲一個日期,這是一個日期)或需要一些術語來使用[運營商](http:// stackoverflow.com/search)(像SO用「user:」,「votes:」&c)。 [描述目標](http://catb.org/~esr/faqs/smart-questions.html#goal),不只是這一步,所以你不會成爲[XY問題]的受害者(http:///meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – outis

回答

0

無論你真正想從你的查詢中獲得什麼,你可以在這樣的PHP行中撰寫您的查詢

"SELECT @a:= '".$sessionId."|".$cilentId."|".$date."|".$email."', * FROM sessions s 
WHERE s.session_id REGEXP @a OR s.cilentId REGEXP @a OR s.date REGEXP @a OR s.email REGEXP @a" 

您可以在mysql中使用此查詢的經驗

select @a:='mon|ues|dnesd', 
'monday' regexp @a or "tuesday" regexp @a or "wednesday" regexp @a 

修改@a值並在結果中看到0/1邏輯。

+0

由於主機和嵌入式語言的混合,注入攻擊(以及相關的錯誤)的可能性很高。 – outis

+0

當然,但這不是問題(假設值在插入查詢文本之前被嚴格驗證)。 – mishau

+0

假設任何關於安全的事情都會讓你陷入困境。即使OP沒有詢問某個重要方面(如安全性),如果該方面未得到解決,答案應至少包括一個註釋。那裏有太多的複製和粘貼編碼器。此外,這可以很容易地重寫爲使用準備好的語句。 – outis