PDO - 使用LIMIT时获得总结果,带参数绑定

时间:2017-07-06 10:55:18

标签: php mysql pdo

我正在使用PDO运行相当复杂的MySQL查询(多个LEFT JOINGROUP_CONCAT和绑定参数)。由于查询的复杂性,我在末尾添加了一个LIMIT子句来返回一组特定的数据 - 这在我的应用程序的分页表中显示。

分页需要找到总结果数。我没有意识到这很尴尬,但已经阅读了以下内容:

SQL_CALC_FOUND_ROWS的表现非常糟糕,所以我无法使用它。

我能想到写这个的唯一方法是使用COUNT运行第二个查询。但是因为查询使用参数绑定(对于用户输入的搜索词),我必须在第二个查询中再次绑定它们。

我获得结果的初始查询如下所示:

// Get the results
$sql = ' '; // Complex query
$limit = ' LIMIT ' . $start . ', ' . $offset;
$stmt = $connection->prepare($sql);

// Search parameters
if (isset($search['term1'])) {
    $stmt->bindValue('term1', '%' . $search['term1'] . '%');
} 
if (isset($search['term2'])) {
    $stmt->bindValue('term2', '%' . $search['term2'] . '%');
}
if (isset($search['term3'])) {
    $stmt->bindValue('term3', '%' . $search['term3'] . '%');
}

$stmt->execute();
return $stmt->fetchAll('assoc');

现在我需要移除LIMIT,以便我完成以下操作:

$stmt_count = $connection->prepare('SELECT COUNT(*) FROM (' . $sql . ') AS total_results');
$stmt_count->execute();

但这不起作用,因为我需要再次绑定参数。当然,有一种更有效的方法,而不是重复所有绑定到$stmt_count ??

 if (isset($search['term1'])) {
    $stmt_count->bindValue('term1', '%' . $search['term1'] . '%');
} 
if (isset($search['term2'])) {
    $stmt_count->bindValue('term2', '%' . $search['term2'] . '%');
}
if (isset($search['term3'])) {
    $stmt_count->bindValue('term3', '%' . $search['term3'] . '%');
}

顺便说一句,我无法相信这样的基本内容如此困难!能够轻松了解查询结果总数是一个非常基本的要求。

0 个答案:

没有答案