Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当我从数据库中选择所有行时,PDO“连接太多”_Php_Mysql_Pdo - Fatal编程技术网

Php 当我从数据库中选择所有行时,PDO“连接太多”

Php 当我从数据库中选择所有行时,PDO“连接太多”,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试编写一个函数,用于根据与该交易关联的所有购买来验证银行交易金额。可以将采购链接到多个交易,也可以将多个采购链接到同一个交易 该函数的工作原理是:对有问题的交易进行合计,然后运行DB查询以选择所有购买,然后检查每个购买以查看它是否引用了有问题的任何交易。然后,它汇总与任何交易相关联的所有购买金额,并通过检查这两个合计是否合计来进行对账 我的问题是,当我从数据库中获取所有购买信息时,总是会出现“连接太多”错误。如果我限制搜索,那也没关系,但是我需要所有的搜索才能让函数正常工作 我要么需要修

我正在尝试编写一个函数,用于根据与该交易关联的所有购买来验证银行交易金额。可以将采购链接到多个交易,也可以将多个采购链接到同一个交易

该函数的工作原理是:对有问题的交易进行合计,然后运行DB查询以选择所有购买,然后检查每个购买以查看它是否引用了有问题的任何交易。然后,它汇总与任何交易相关联的所有购买金额,并通过检查这两个合计是否合计来进行对账

我的问题是,当我从数据库中获取所有购买信息时,总是会出现“连接太多”错误。如果我限制搜索,那也没关系,但是我需要所有的搜索才能让函数正常工作

我要么需要修复连接过载问题,要么编写查询以仅搜索包含这些事务的购买,但我不确定如何做到这一点

交易记录在采购分录的一列中以逗号分隔

有趣的是,如果通过AJAX调用购买列表,它就可以正常工作。但是如果包含其他先前连接的页面是静态加载的,那么它就不能工作。我假设因为AJAX正在加载一个东西,所以在该实例中没有先前的连接

这是一个相当复杂的系统,因此这本身可能没有多大帮助:

public static function verify($ids, $return = NULL) {

    // Transaction total
    $transactions = explode(",",$ids);
    $transTotal = 0;
    foreach($transactions as $transaction) {
        $transTotal = $transTotal + self::get($transaction,"amount");
    }

    // Expense/item total
    $accounts = AccItem::getAll("all");
    $itemTotal = 0;
    foreach($accounts as $item) {
        $translink = explode(",",$item->transaction_ids);
        if(array_intersect($transactions, $translink)) {
            $itemTotal = $itemTotal + AccItem::calculate($item->id,"total") + AccItem::calculate($item->id,"tax");
        }
    }
    unset($accounts);

    if($transTotal == $itemTotal or $transTotal + $itemTotal == 0) {
        if($return) return 'check';
        if(!$return) echo '<abbr title="Transaction verified."><i class="fa fa-check-circle"></i></abbr>';
    } else {
        if(!$return) echo '<abbr title="Transaction amount mismatch!"><i class="fa fa-exclamation-circle"></i></abbr>';
    }

}
下面是getAll函数:

public static function getAll($chart_id, $date_from = 0, $date_to = 9999999999999) {
    $db = new Data;
    if($chart_id == "all") {
        $sql = $db->query("SELECT * FROM mc_account_items WHERE date_incurred >= :date_from AND date_incurred <= :date_to ORDER BY date_incurred DESC");
    } else {
        $sql = $db->query("SELECT * FROM mc_account_items WHERE chart_id = :chart_id AND date_incurred >= :date_from AND date_incurred <= :date_to ORDER BY date_incurred DESC");
        $sql->bindParam(":chart_id", $chart_id);
    }
    $sql->bindParam(":date_from", $date_from);
    $sql->bindParam(":date_to", $date_to);
    $sql->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE,'AccItem');
    $sql->execute();
    return $sql->fetchAll();
    //unset($db);
}

所以我读了更多的东西,发现我想要一个持久的连接,因为每次都是相同的连接。它将只使用缓存连接,而不是打开一个新连接

PDO::ATTR_PERSISTENT => true

令人惊叹的那么这解决了你的问题?确实解决了!从那以后就没有任何问题了,摸摸木头。