2

PHPスクリプトに渡されるユーザーIDのコレクションのPOSTリクエストがあります。このコレクションは、「user_table」の既存のIDと比較されています。

これは、IDの配列を文字列に結合することで実現され、結果のコンマ区切りIDの文字列がクエリで直接使用されます。

これはうまく拡張できず、災害になる可能性があるのではないかと心配しています。この種の問題に対する従来のアプローチについて、誰かがいくつかの知恵を共有できますか?

$id_json_array = postVar('u');
$user_ids = json_decode($id_json_array);
$str_ids = join(',', $user_ids);

$result = mysql_query(
   "SELECT  u.user_id AS i
          , u.user_name AS u
    FROM    user_table u
    WHERE   u.user_id IN ($str_ids)"
) or die (mysql_error ());

ids配列はおそらく数千であり、「user_table」は大きい(数万または数十万、インデックス付きなど)

前もって感謝します。

4

1 に答える 1

1

user_idインデックスが付けられている限り、ここでは問題はありません。

同様の例の1つとして、私はかつて、あなたのコンテンツを保持する一時的なMEMORYテーブルを$str_ids作成し、この一時テーブルを使用してJOINを実行しました。このトリックの理由は次のとおりです。

  • (主な理由)リストはかなり大きく、クエリの長​​さで制限に達する可能性があるのではないかと心配していました
  • (副次的な理由)スクリプトの途中でこのリストを数回使用する必要がありました

そのような一時テーブルを構築する(そしておそらくインデックスを付ける)オーバーヘッドは、それを使用することの可能な利益を相殺するかもしれないし、相殺しないかもしれません。私の場合、そうではありませんでした。

編集:ああ、このスレッドは、リスト内の要素の最大数を事前に知っている場合、エレガントな代替案を提案します。

于 2012-06-10T09:22:59.390 に答える