0

我正在编写一个小项目,其中一部分涉及根据用户输入创建 MySQL 查询。用户有很多选项可供选择来构建对数据库的动态查询。我一直在疯狂地寻找我的问题的任何现有答案,但它们似乎都是与我所遇到的不同的问题。

用户可以指定修改查询的选项:

  • IP 地址(他们可以输入整个 IP 或部分 IP,它将搜索整个范围)
  • 类型(类型 1 / 类型 2)
  • 状态(活动/非活动)
  • 载体

选择查询将根据他们是否选择上述任何选项而改变。如果他们选择了两种类型,则不需要指定类型条件,同样如果两种状态都选择,则不需要使用状态作为条件。如果用户输入 IP,则应搜索 IP 地址,如果输入运营商,则应搜索该运营商。

我正在尝试使用 PDO 和 Prepare 语句来执行此操作,但我想知道如何使用 PDO 设置准备和执行语句,同时有这么多潜在选项(如果他们只选择一种类型和一种状态,或者两种类型和一个承运人等)。

是否有任何现有的 PDO 功能/方法可以使这更容易?还是我需要创建一堆 if/else 语句来检查每个选项并附加一个 $sql 语句变量?

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>

查询结果:(所有输入都已清理,是吗?)

$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 回答