2015-07-13 17 views
0

从手册:PDO数从SELECT查询行与post数据

PDOStatement对象:: rowCount时()返回由相应的执行受到 行最后DELETE,INSERT或UPDATE语句的数量 PDOStatement对象。

如果由关联的PDOStatement执行的最后一条SQL语句是 的SELECT语句,某些数据库可能会返回该语句返回的行数 。但是,对于所有数据库,此行为不保证 ,不应依赖便携式 应用程序。

因此PDOStatement::rowCount()不适用于我的SELECT查询。我有查询,我必须要能够AND添加条件WHERE条款是这样的:

$sql = "SELECT * FROM customers WHERE 1=1"; 

if ($name) 
    $sql .= " AND `name` LIKE :name"; 
if ($type) 
    $sql .= " AND `type` = :type"; 
if ($category) 
    $sql .= " AND `category` = :category"; 
if ($group) 
    $sql .= " AND `group` = :group"; 
if ($area) 
    $sql .= " AND `area` = :area"; 

$query = $pdo->prepare($sql); 

if ($name) 
    $query->bindValue(':name', '%' . $name . '%'); 
if ($type) 
    $query->bindValue(':type', $type); 
if ($category) 
    $query->bindValue(':category', $category); 
if ($group) 
    $query->bindValue(':group', $group); 
if ($area) 
    $query->bindValue(':area', $area); 

$query->execute(); 

我需要做到像下面的代码或者是有一些简单的方法来做到这一点?

$sql = "SELECT * FROM customers WHERE 1=1"; 
$count = "SELECT COUNT(*) FROM customers WHERE 1=1"; 

if ($name) { 
    $sql .= " AND `name` LIKE :name"; 
    $count .= " AND `name` LIKE :name"; 
} 
if ($type) { 
    $sql .= " AND `type` = :type"; 
    $count .= " AND `type` = :type"; 
} 
if ($category) { 
    $sql .= " AND `category` = :category"; 
    $count .= " AND `category` = :category"; 
} 
if ($group) { 
    $sql .= " AND `group` = :group"; 
    $count .= " AND `group` = :group"; 
} 
if ($area) { 
    $sql .= " AND `area` = :area"; 
    $count .= " AND `area` = :area"; 
} 

$query = $pdo->prepare($sql); 

if ($name) 
    $query->bindValue(':name', '%' . $name . '%'); 
if ($type) 
    $query->bindValue(':type', $type); 
if ($category) 
    $query->bindValue(':category', $category); 
if ($group) 
    $query->bindValue(':group', $group); 
if ($area) 
    $query->bindValue(':area', $area); 

$query->execute(); 
+0

可能重复【行数与PDO(HTTP://计算器。 com/questions/883365/row-count-with-pdo) –

+0

@GeraldSchneider,我们的问题有点不同,我只是看看是否有一些更简单的方法来做到这一点。例如,我可以使用相同的连接赋值运算符''将'$ sql'和'$ count'添加到同一个文件中。'=' – lingo

+0

您的要求完全相同。第二个答案(不是公认的答案)解释了可能性很好。 –

回答

0

尽管rowCount()最有可能工作,但您不需要它。这对于选择来说是最没用的功能。

您可能需要您的数据或数量,但不是两者都有。由于您正在选择数据,因此您不需要rowCount()。只需统计你的数据。

如果您只需要计数但没有数据,那么您应该从数据库中选择正确的计数。意味着你不需要再次使用rowCount()。

+0

您的意思是我不需要额外的查询来计算行数?由于分页,我需要行数。 – lingo

-1

添加计数查询:

SELECT *, COUNT(*) as rowCount FROM customers` 

然后,当你获取:

获得价值的$row['rowCount'];