【问题标题】:Conditional query with PDO prepare and bind statement使用 PDO 准备和绑定语句的条件查询
【发布时间】:2015-10-08 08:07:26
【问题描述】:

我正在将我的所有查询从 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 之后放置它

所以$sql = $dbh->prepare("Select * from table data Where tableId = 5 {$where}");之前有一个if语句,之后有一个if语句。

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

【问题讨论】:

    标签: php if-statement pdo bind prepare


    【解决方案1】:

    您可以使用方便的 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 语法,我在编辑查询时一定搞砸了,所以不用担心。
    猜你喜欢
    • 1970-01-01
    • 2010-12-19
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多