2017-07-14 22 views
-1

のリストのいずれかが含まれているので、これは説明するのは少し難しいですが、私はこのような何かを持っているかどうかを確認するために検索:のMySQL PHP - カラムがわかりまし変数

$yourScripts = 777,1337, -- My variable 

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

マイスクリプトログテーブルは次のようになります。

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

正しいscriptidを持つ行を返すようにクエリを取得するにはどうすればよいですか?現在は何も返しません。

私もこれを試してみましたが、それはまた、何も返さない:

$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

関連する問題