使用 PDO 准备和绑定语句的条件查询
Conditional query with PDO prepare and bind statement
我正在将所有查询从 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->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";
$pdo->prepare($sql)->execute($params);
请注意,您代码中的 PHP 语法也是错误的。
我正在将所有查询从 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->prepare("Select * from table data Where tableId = 5 {$where}");
之前有一个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";
$pdo->prepare($sql)->execute($params);
请注意,您代码中的 PHP 语法也是错误的。