php - 动态搜索 PHP MYSQL PDO

标签 php mysql

我有一个包含 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/

相关文章:

php - 如何检查 PHP 中全局变量的历史记录?

mysql - 如何删除和更改 mysql 事件调度程序?

mysql - Laravel:whereNotIn 没有按预期工作

mysql - 为什么在mysql中使用limit和offset时记录丢失?

php - 找不到类 'COM'

php - 当我在 url 末尾添加斜杠 (/) 时,CSS 不起作用

php - 将多行更新到 WordPress 表中

MySQL错误您无法在FROM子句中指定更新目标表

php - CodeIgniter 事件记录,在 ->select() 函数中添加 IF 语句

php - json_encode 的数组到字符串转换错误