我正在将所有查询从mysql转换为PDO,在这个过程中,我发现了一个条件查询,如下
if (isset($parameters['searchTerm'])) {
$where =" And title LIKE '%{$parameters['searchTerm'] }%'";
}
$sql = "Select * from table data Where tableId = 5 {$where} ";
当我试图在PDO中转换这个查询时,预期的语法如下
if (isset($parameters['searchTerm'])) {
$where =" And title LIKE :searchTerm";
}
$sql = $dbh->prepare("Select * from table data Where tableId = 5 {$where}");
if (isset($parameters['searchTerm'])) {
$sql ->bindParam(':searchTerm', '%{$parameters['searchTerm'] }%');
}
$sql ->execute();
现在,正如您所看到的,if条件if (isset ($parameters ['searchTerm'] )) {...}
重复两次。
原因是
- 在设置$where之前,我无法准备sql查询,因此在第一个if语句之后初始化$sql变量
- 在准备sql之前,我无法绑定参数,因此必须将其放置在准备$sql之后
所以$sql = $dbh->prepare("Select * from table data Where tableId = 5 {$where}");
前面有一个if语句,后面有一个if语句。
我的问题是:有没有办法删除这个多余的if语句,或者我只能这样做。
您可以使用一个方便的PDO功能,该功能允许您将带有参数的数组直接发送到execute((
$where = '';
$params = array();
if (isset($parameters['searchTerm'])) {
$where = " And title LIKE :searchTerm";
$params['searchTerm'] = "%$parameters[searchTerm]%";
}
$sql = "Select * from table data Where tableId = 5 $where";
$stmt = $pdo->prepare($sql)
$stmt->execute($params);
$data = $stmt->fetchAll();