Php 使用PDO prepare和bind语句的条件查询

Php 使用PDO prepare和bind语句的条件查询,php,if-statement,pdo,bind,prepare,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

我正在将所有查询从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查询,因此$sql变量在第一个if语句之后初始化 在准备sql之前,我无法绑定参数,因此必须在准备$sql之后放置它 所以在$sql=$dbh->prepareSelect*之前有一个if语句,tableId=5{$Where};后面是一个if语句


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

您可以使用handy 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语法也是错误的。

关于PHP语法,我一定是在编辑查询时弄错了什么,所以不用担心。