使用PDO准备和绑定语句

时间:2015-10-08 08:07:26

标签: php if-statement pdo bind prepare

我将所有查询从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'] )) {...}重复两次。

原因是

  1. 我无法在$ where之前准备sql查询因此在第一个if语句之后初始化$ sql变量
  2. 在准备sql之前我无法绑定参数,因此必须在准备$ sql之后放置它
  3. 因此在$sql = $dbh->prepare("Select * from table data Where tableId = 5 {$where}");之前有一个if语句,在之后有一个if语句。

    我的问题是:有没有办法删除这个冗余的if语句,或者我必须这样做。

1 个答案:

答案 0 :(得分:0)

您可以使用便捷的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";
$pdo->prepare($sql)->execute($params);

请注意,代码中的PHP语法也是错误的。

相关问题