Php 当我从数据库中选择所有行时,PDO“连接太多”
我正在尝试编写一个函数,用于根据与该交易关联的所有购买来验证银行交易金额。可以将采购链接到多个交易,也可以将多个采购链接到同一个交易 该函数的工作原理是:对有问题的交易进行合计,然后运行DB查询以选择所有购买,然后检查每个购买以查看它是否引用了有问题的任何交易。然后,它汇总与任何交易相关联的所有购买金额,并通过检查这两个合计是否合计来进行对账 我的问题是,当我从数据库中获取所有购买信息时,总是会出现“连接太多”错误。如果我限制搜索,那也没关系,但是我需要所有的搜索才能让函数正常工作 我要么需要修复连接过载问题,要么编写查询以仅搜索包含这些事务的购买,但我不确定如何做到这一点 交易记录在采购分录的一列中以逗号分隔 有趣的是,如果通过AJAX调用购买列表,它就可以正常工作。但是如果包含其他先前连接的页面是静态加载的,那么它就不能工作。我假设因为AJAX正在加载一个东西,所以在该实例中没有先前的连接 这是一个相当复杂的系统,因此这本身可能没有多大帮助:Php 当我从数据库中选择所有行时,PDO“连接太多”,php,mysql,pdo,Php,Mysql,Pdo,我正在尝试编写一个函数,用于根据与该交易关联的所有购买来验证银行交易金额。可以将采购链接到多个交易,也可以将多个采购链接到同一个交易 该函数的工作原理是:对有问题的交易进行合计,然后运行DB查询以选择所有购买,然后检查每个购买以查看它是否引用了有问题的任何交易。然后,它汇总与任何交易相关联的所有购买金额,并通过检查这两个合计是否合计来进行对账 我的问题是,当我从数据库中获取所有购买信息时,总是会出现“连接太多”错误。如果我限制搜索,那也没关系,但是我需要所有的搜索才能让函数正常工作 我要么需要修
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
令人惊叹的那么这解决了你的问题?确实解决了!从那以后就没有任何问题了,摸摸木头。