我正在编写一个小项目,其中一部分涉及根据用户输入创建MySQL查询。用户有很多选项可供选择,以构建对数据库的动态查询。我一直在寻找像疯了一样找到任何现有的回答我的问题,但他们都似乎比我有什么不同的问题。
用户可以指定修改查询的选项:
选择查询将根据是否具有上述任何选项进行更改。如果他们同时选择两种类型,则不需要指定类型条件,同样如果两种状态都是选中状态,则不需要将状态用作条件。如果用户输入IP,则应搜索IP地址,如果他们输入运营商,则应搜索该运营商。
我正在尝试使用PDO和Prepare语句来执行此操作,但我想知道如何使用PDO设置prepare和execute语句,同时拥有如此多的潜在选项(如果他们只选择一种类型和一种状态,或两种类型和一种载体等。)
是否有任何现有的PDO功能/方法可以使这更容易?或者我是否需要创建一堆if / else语句来检查每个选项并附加$ sql语句变量?
答案 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....