MySql PDO准备的Select语句 - 通过PHP count()计算类中的结果

时间:2016-05-11 17:11:16

标签: php mysql oop pdo count

我有一个我似乎无法解决的问题。我试图从select语句中获取行数。

我首先要说的是,我已经尝试了针对此问题进行谷歌搜索的所有方法。

我正在使用结果集,所以我不想再进行第二次查询。

查询使用准备好的select语句,如果我理解正确,这似乎是一个主要问题。

我决定使用PHP的本地count()函数尝试一种简单的方法。这引导我到这里因为我终于到达了绳子的尽头。

在我的一个班级中的详细信息......我这样做了一个查询。

    // Create database connection
    $database = DatabaseFactory::getFactory()->getConnection();

    // Set and execute database query
    $sql = "SELECT * FROM `service_orders` WHERE `agency_id` = :agency_id $filter ORDER BY $sort $order $per_page"; 
    $query = $database->prepare($sql);
    $query->execute($query_array);

    // If results
    if ($query->rowCount() > 0) {                               
            $results = $query->fetchAll();              
            self::$order_count = "Count: " . count($results);
            return $results;
    }

    // Default, return false
    return false;

首饰

  1. 如果我像上面那样执行count($results),我会得到数据库中的总行数(让我们说50)。
  2. 如果我print_r($results),它会显示具有适当条目数的数组(假设为10),这当然不同于数据库中的总行数。
  3. 这两者有何不同?它好像count($results)误读了结果数组。

    更多调查结果

    在我的实际php页面中,我调用该类来检索这样的数据。

    $results = OrderModel::getServiceOrders();
    echo count($results);
    

    奇怪的是,如果我再执行count($results),它会给我正确的结果数组读数(在我的例子中这将是10)。

    我对此感到困惑,因为计数功能正在完全相同的数组上执行。唯一的区别是一个在类中的数组上调用,另一个在从类返回的数组上调用。

    在此实例中使用count()时,有没有人对如何解决这个问题或者为何存在差异有任何想法?

    提前谢谢大家! 詹姆斯

    其他信息

    这是另一个令人烦恼的场景。如果我将计数与实际结果一起返回,我可以在页面上以正确的值(10行)访问它。然而,如果我将它设置为会话变量,并以这种方式访问​​它,则计数是整个数据集(50行)。这两个值怎么可能不一样?!

    $results = $query->fetchAll();              
    Session::set("order_count", $total[0]); // Yields 50 (incorrect)
    return [
        "results"=> $results,
        "count"=> $total[0], // Yields 10 (correct)
    ];
    

0 个答案:

没有答案