选择查询中的多个where条件

时间:2012-10-28 21:23:17

标签: php mysql pdo conditional where-clause

我正在编写一个小项目,其中一部分涉及根据用户输入创建MySQL查询。用户有很多选项可供选择,以构建对数据库的动态查询。我一直在寻找像疯了一样找到任何现有的回答我的问题,但他们都似乎比我有什么不同的问题。

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

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

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

我正在尝试使用PDO和Prepare语句来执行此操作,但我想知道如何使用PDO设置prepare和execute语句,同时拥有如此多的潜在选项(如果他们只选择一种类型和一种状态,或两种类型和一种载体等。)

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

1 个答案:

答案 0 :(得分: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....