【发布时间】:2021-04-28 19:26:35
【问题描述】:
我对 PDO 有一个疑问。 我在类中有一个方法,它从数据库返回数据以用于发送的过滤器。 我想获得该查询的行数,但查询中有 LIMIT 和 STAR。 因此,正因为如此,我使用两个查询来获取许多行和数据,但要工作,我需要绑定相同的值两次。有没有更优雅的方式来实现不重复代码? 我使用的方法如下。
$db = $this->openConnection();
$sql = " SELECT * FROM contacts";
// Filter data by main search input
if(!empty($search_query)){
$sql .= " WHERE ( location LIKE :search_query_location OR address LIKE :search_query_address ) ";
}
$sql .=" ORDER BY ".$order;
$stmt = $db->prepare($sql);
if(!empty($search_query)){
$stmt->bindValue(':search_query_location', (string) $search_query.'%');
$stmt->bindValue(':search_query_address', (string) $search_query.'%');
}
// Get number of rows after filter
$stmt->execute();
$total = $stmt->rowCount();
$sql .=" LIMIT :start, :limit_num";
$stmt = $db->prepare($sql);
if(!empty($search_query)){
$stmt->bindValue(':search_query_location', (string) $search_query.'%');
$stmt->bindValue(':search_query_address', (string) $search_query.'%');
}
// Bind start and limit value
$stmt->bindValue(':start', (int) $start, PDO::PARAM_INT);
$stmt->bindValue(':limit_num', (int) $limit, PDO::PARAM_INT);
// Get filtered data
$stmt->execute();
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
return array($total,$data);
为什么我需要为两个相同的查询重复绑定一个没有限制的工作是否有任何优雅的解决方案
【问题讨论】:
-
你需要绑定两次,因为你绑定的是两个不同的对象...