23

URL文字列に基づいていくつかのIDを選択したいのですが、私のコードでは最初のものしか表示されません。手動でIDを書くとうまくいきます。

http://www.mydomain.com/myfile.php?theurl=1,2,3,4,5 (ids)のような URL があります。

myfile.php には、SQL 接続があります。

$ids = $_GET['theurl']; (and i am getting 1,2,3,4,5)

私がこれを使用する場合:

$sql = "select * from info WHERE `id` IN (1,2,3,4,5)";
$slqtwo = mysql_query($sql);
while ($tc = mysql_fetch_assoc($slqtwo)) {
    echo $tc['a_name'];
    echo " - ";
}

私は正しい結果を得ています。今、次のコードを使用しても機能しません:

$sql = "select * from info WHERE `id` IN ('$ids')";
$slqtwo = mysql_query($sql);
while ($tc = mysql_fetch_assoc($slqtwo)) {
    echo $tc['a_name'];
    echo " - ";
}

助言がありますか?

4

2 に答える 2

48

補間すると

"select * from info WHERE `id` IN ('$ids')"

ID を使用すると、次のものが得られます。

"select * from info WHERE `id` IN ('1,2,3,4,5')"

...これは、一連の ID を一連の整数ではなく単一の文字列として扱います。

IN次のように、句内の単一引用符を取り除きます。

"select * from info WHERE `id` IN ($ids)"

また、 SQL インジェクション攻撃をチェックする必要があることも忘れないでください。あなたのコードは現在非常に危険であり、重大なデータ損失またはアクセスのリスクがあります。誰かが次の URL であなたの Web ページを呼び出し、あなたのコードが 1 つのクエリで複数のステートメントを実行できるようにした場合、どうなるかを考えてみてください。

http://www.example.com/myfile.php?theurl=1);delete from info;-- 
于 2013-12-24T14:17:42.963 に答える
4

FIND_IN_SET()関数を試すこともできます

$SQL = "select * from info WHERE FIND_IN_SET(`id`, '$ids')"

また

$SQL = "select * from info WHERE `id` IN ($ids)"
于 2013-12-24T14:20:39.143 に答える