2017-07-14 53 views
-1

好的列表中的一個,所以這是一個有點難以解釋,但我有這樣的事情:MySQL的PHP​​ - 搜索,看是否列包含的變量

$yourScripts = 777,1337, -- My variable 

$yourData = mysqli_query($db,"SELECT * FROM scriptlog WHERE FIND_IN_SET('$yourScripts', scriptid)") -- My query 

我scriptlog表看起來像這樣:

scriptid | other stuff 
----------------------- 
1337  | xxxxxxx 
456  | xxxxxxx 
777  | xxxxxxx 

如何獲得我的查詢以返回具有正確腳本的行?目前它什麼都不返回。

我也試過,但它也沒有返回值:

$yourData = mysqli_query($db,"SELECT * FROM scriptlog WHERE scriptid LIKE '%{$yourScripts}%'") 
+0

一些爲你閱讀https://stackoverflow.com/questions/4155873/find-in-set-vs-in – TimBrownlaw

+0

你有'FIND_IN_SET'倒退的參數。否則它應該工作。 – Barmar

回答

0

以逗號分隔字符串的第二個參數FIND_IN_SET,不是第一,所以它應該是:

$yourData = mysqli_query($db,"SELECT * FROM scriptlog WHERE FIND_IN_SET(scriptid, '$yourScripts')"); 

你也可以使用IN(),因爲它可以使用索引。

$yourData = mysqli_query($db,"SELECT * FROM scriptlog WHERE scriptid IN ($yourScripts)"); 

如果$yourScripts是來自用戶,請確保您第一代入SQL前消毒 - 這隻能是整數。

+0

謝謝你。 $ yourScripts實際上來自另一個mySQL查詢,但我肯定會清理所有用戶輸入以防萬一感謝:) – questionMONSTER

+0

如果它來自另一個查詢,爲什麼不只是在一個查詢中加入表,而不是將它轉換成一個字符串。 – Barmar