2017-07-14 30 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