Pdo使用POST参数从SELECT查询中计算行数

时间:2015-07-13 10:28:38

标签: php pdo

来自手册:

  

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

     

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

PDOStatement::rowCount() SELECTAND查询不起作用。我有查询,我必须能够将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();

我是否需要像下面的代码那样做,或者有更简单的方法吗?

urlpatterns = [
url(r'^mailer/$', views.Mailer.as_view(), name='send-email-to-admin'),
url(r'^.*/$',views.Error404.as_view(),name='error404')]

2 个答案:

答案 0 :(得分:0)

虽然rowCount()最有可能正常工作,但无论如何你都不需要它。对于选择而言,这是最无用的功能。

您需要数据或计数,但不是两者都需要。由于您选择了数据,因此您不需要rowCount()。只计算您的数据。

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

答案 1 :(得分:-1)

将计数添加到您的查询中:

:focus

然后当你获取:

获取值SELECT *, COUNT(*) as rowCount FROM customers`