我有一个包含 3 个选择框的表单:年龄、房间、类型。
<form action="results.php" method="get">
<div class="form-group">
<select name="age">
<option value>Any</option>
<option value="1">15</option>
<option value="2">25</option>
<option value="3">30</option>
<option value="4">40</option>
</select>
</div>
<div class="form-group">
<select name="room">
<option value>Any</option>
<option value="1">1</option>
<option value="2">2</option>
</select>
</div>
<div class="form-group">
<select name="type">
<option value>Any</option>
<option value="1">Personal</option>
<option value="2">Business</option>
</select>
</div>
</form>
我想用 PDO 做的是进行一次小型搜索。 如果所有变量都是空的,那么我的条件是:
$search = $db->query("SELECT * FROM table");
如果其中 1 个(例如年龄)不为空,那么我有:
if(!empty($_GET['age'])){
$age = $_GET['age'];
$search = $db->query("SELECT * FROM table WHERE age = '$age'");
}
现在,如果其中 2 个 npt 是空的,我有:
if(!empty($_GET['age']) && !empty($GET['room'])){
$age = $_GET['age'];
$room = $_GET['room'];
$search = $db->query("SELECT * FROM table WHERE age = '$age' AND room = '$room'");
}
为了避免所有可能的搜索组合,如果不为空,我如何使用术语进行搜索。我过去做过一个:
if(!empty($age)){
$where = "WHERE age = '$age'";
}
if(!empty($room)){
$where .= "and room = '$room'";
}
$query = "SELECT * FROM table $where";
如何使用 PDO 实现它? :/
最佳答案
我会做这样的事情:
$param = array();
$query = 'SELECT ... FROM t WHERE 1=1';
if(!empty($_GET['age'])){
$param['age'] = $_GET['age'];
$query .= ' AND t.age = :age';
}
if(!empty($_GET['room'])){
$param['room'] = $_GET['room'];
$query .= ' AND t.room = :room';
}
if(!empty($_GET['type'])){
$param['type'] = $_GET['type'];
$query .= ' AND t.type = :type';
}
$dbh->prepare($query)->execute($param);
您可能希望将准备
和执行
分开。在尝试调用 execute
之前检查 prepare
的返回。或者,configure PDO 可以在发生错误时抛出异常,例如
$dbh->setAttribute(PDO::ERRMODE_EXCEPTION);
关于php - 动态搜索 PHP MYSQL PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34801359/