0

私は小さなプロジェクトをコーディングしていますが、その一部には、ユーザー入力に基づいてMySQLクエリを作成することが含まれます。ユーザーには、データベースへの動的クエリを作成するために選択できる多くのオプションがあります。私は私の質問に対する既存の答えを見つけるために狂ったように探していましたが、それらはすべて私が持っているものとは異なる問題のようです。

ユーザーがクエリを変更するために指定できるオプション:

  • IPアドレス(IP全体または一部を入力でき、範囲全体を検索します)
  • タイプ(タイプ1 /タイプ2)
  • ステータス(アクティブ/非アクティブ)
  • キャリア

選択クエリは、上記のオプションのいずれかが選択されているかどうかによって変わります。両方のタイプを選択した場合は、タイプ条件を指定する必要はありません。同様に、両方のステータスが選択されている場合は、ステータスを条件として使用する必要はありません。ユーザーがIPを入力した場合は、IPアドレスを検索し、キャリアを入力した場合は、そのキャリアを検索する必要があります。

私はこれを行うためにPDOとPrepareステートメントを使用しようとしていますが、非常に多くの潜在的なオプション(1つのタイプと1つのステータス、または両方のタイプを選択する場合)を使用しながら、PDOでprepareステートメントとexecuteステートメントを設定するにはどうすればよいか疑問に思っていますおよび1つのキャリアなど)。

これを簡単にする既存のPDO関数/メソッドはありますか?または、各オプションをチェックして$ sqlステートメント変数を追加するために、一連のif / elseステートメントを作成する必要がありますか?

4

1 に答える 1

0

入力:

<form method='post' action='queryresults.php'><br/>
    IP: <input type='string' name='ip_address'/>
    Carrier: <select name='carrier'>
        <option value='-1'>Any</option>
        <option value='1'>1</option>
        <option value='2'>2</option>
    </select><br/>
    Status: <select name='status'>
    <option value='-1'>Any</option>
    <option value='1'>Active</option>
    <option value='2'>Inactive</option>
    </select>
    <input type='text' name='carrier'/>
    (some submit button or more ajax/js stuff)
    </form>

queryresults: (すべての入力はサニタイズされていますか?)

$sql="select [some fields] from [some complex join]<br/>
      where <br/>
      (ip_address like '$ip_address' or $ip_address='') and<br/>
      (carrier=$carrier or $carrier=-1) and<br/>
      (status=$status or $status=-1) and<br/>
      (carrier like $carrier or $carrier='')<br>
     ...";
    $stmt=mysql_prepare....
于 2012-10-28T21:51:28.827 に答える