【问题标题】:Pdo count rows from SELECT query with POST params带有 POST 参数的 SELECT 查询中的 Pdo 计数行
【发布时间】:2015-10-01 13:45:15
【问题描述】:

来自手册:

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();

【问题讨论】:

  • Row count with PDO的可能重复
  • @GeraldSchneider,我们的问题有点不同,我只是在寻找是否有更简单的方法来做到这一点。例如,我可以使用相同的连接赋值运算符 .= 向 $sql 和 $count 添加内容吗?
  • 你问的完全一样。第二个答案(不是公认的)很好地解释了可能性。
  • 这是一个例子,我问我能不能做得更容易。
  • 使用 SQL 您可以返回诸如有关数据“组”的计数之类的信息,或者返回单个数据行。在一次查询中,在一次数据传递中同时做到这两点并不容易。

标签: php pdo


【解决方案1】:

虽然 rowCount() 最有可能工作,但您仍然不需要它。这是选择最没用的功能。

您要么需要数据,要么需要计数,但不能两者都需要。由于您正在选择数据,因此您不需要 rowCount() 。只需计算您的数据即可。

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

【讨论】:

  • 你的意思是我不需要额外的查询来计算行数吗?由于分页,我需要行数。
【解决方案2】:

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

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

那么当你获取时:

获取值$row['rowCount'];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2013-04-10
    • 1970-01-01
    • 2013-03-31
    • 2023-03-12
    • 2018-10-15
    • 2014-04-02
    相关资源
    最近更新 更多