Php while循环中的查询获取陈旧数据

Php while循环中的查询获取陈旧数据,php,mysql,loops,while-loop,Php,Mysql,Loops,While Loop,我正在尝试(但没有成功)使用一个查询运行while循环,该查询获取表中的最后一行,使用该数据,然后创建新行,然后再次选择表中的最后一行(应该是刚刚创建的行),然后使用该数据并创建新行。这应该重复,直到while循环不再为真 我遇到的问题是while循环运行,但总是使用它在第一轮中选择的行。因此,重复插入同一行,直到while循环为false 我的问题是,当while循环启动一个新循环时,如何让查询刷新 我尝试过取消设置(),但这不起作用,我也没有主意。这里是我的代码的while循环(仍在进行中-

我正在尝试(但没有成功)使用一个查询运行while循环,该查询获取表中的最后一行,使用该数据,然后创建新行,然后再次选择表中的最后一行(应该是刚刚创建的行),然后使用该数据并创建新行。这应该重复,直到while循环不再为真

我遇到的问题是while循环运行,但总是使用它在第一轮中选择的行。因此,重复插入同一行,直到while循环为false

我的问题是,当while循环启动一个新循环时,如何让查询刷新

我尝试过取消设置(),但这不起作用,我也没有主意。这里是我的代码的while循环(仍在进行中-仍有很多需要添加):-

while($total_debt>0){
$get\u dp\u accounts\u list\u query=“选择account\u id
来自金钱债务规划师
其中customer\u id=“$”会话['customer\u id']。“'
按帐户分组_id“;
$get\u dp\u accounts\u list=$db->Execute($get\u dp\u accounts\u list\u query);
while(!$get\u dp\u accounts\u list->EOF){
$get\u dp\u accounts\u listary[]=array('account\u id'=>$get\u dp\u accounts\u list->字段['account\u id']);
$get_dp_accounts_list->MoveNext();
}
foreach($get\u dp\u accounts\u listary作为$acc\u list){
$get\u last\u dp\u entry\u query=“选择*
来自金钱债务规划师
其中customer\u id=“$”会话['customer\u id']。“'
帐户id=“$acc\U列表['account\U id']”
按行订购_id DESC“;
$get\u last\u dp\u entry=$db->Execute($get\u last\u dp\u entry\u query);
如果($get\u last\u dp\u entry->fields['end\u debt\u balance']0){
//计算本期利息
$accounts\u balance=$get\u last\u dp\u entry->fields['end\u debt\u balance']+$get\u last\u dp\u entry->fields['estimated\u expensation'];
$min_pay=$get_last_dp_entry->字段['min_pay_amount'];
$min_pay_rate=$get_last_dp_entry->字段['min_pay_rate'];
$interest\u rate=$get\u last\u dp\u entry->字段['interest\u rate'];
$int_利率=$interest_利率/100;
$int_rate_a=$int_rate+1;
$int_value_b=$accounts_balance;
$int_value_c=($int_rate_a*$int_value_b)-$int_value_b.';
$int_value_d=$int_value_c/12;
$statement\u balance=$accounts\u balance+$int\u value\d;
$min_pay_rate=($statement_balance)*$min_pay_rate/100;
如果($min_pay_rate<$min_pay){
$new\u bill\u amount=$min\u pay;
}否则{
$new\u bill\u amount=$min\u pay\u rate;
}
如果(($statement_balance)字段['date']);
$next_due_month_a_1=strotime(+1个月),strotime($next_due_year_month1));
$next_due_month_b_1=日期('Y-m',$next_due_month_a_1);
$total_days_in_this_month=日期('t',标准时间($next_due_month_b_1));
如果($next\u due\u day1>=$total\u days\u in\u this\u month){
$next_due_date_a_1=$total_days_in_this_month;
}否则{
$next_due_date_a_1=$next_due_day1;
}
$payment_date_from_account1=$next_due_month_b_1'.-'.$next_due_date_a_1;
$next\u due1a=标准时间($payment\u date\u from\u account1);
$next_due1=日期('Y-m-d',$next_due1a);
$dp\u pay\u date=$next\u due1;//这将是从上次输入开始的1个月
$interest\u this\u period=$int\u value\u d;//这是期末余额的利息+est支出
$payment\u this\u period=$new\u bill\u amount;//这将是允许的最小付款,包括任何超额金额
$end_balance='';//这将是当前未结余额+支出+利息-支付
$sql=“插入到‘货币债务计划表’(‘客户id’、‘账户id’、‘日期’、‘未结债务余额’、‘利率’、‘最低支付率’、‘最低支付金额’、‘信用额度’、‘预计支出’、‘本期利息’、‘本期付款’、‘期末债务余额’)
“,”,“,,,,“,,,,,,,,,,,,,,,,“,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“,,“,“,“,“,“,“,“,“,“,“,“,“,,,,,,“,“,“,“,“,“,“,,,,,,,,,,“,,,,,,,,,,,,,,,“,,,,,,,,,,“,,,,,,,,,,,,,,,,“,,,,,,,,,,,,,,,,,,,“,“,,,,,,,,,,,,,,,,,,,,,,,,“,“,“,“,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,“,”.$get_last_dp_entry->fields['estimated_Expensation']。“,”,“$interest_this_period.”,“$payment_this_period.”,“$end_balance.”;
$db->Execute($sql);
}//如果余额为零,则结束
}//结束帐户列表
//要做到这一点,总债务余额将保持不变
$total_debt=$total_debt-1000;
}

您能提供的任何帮助都将非常好:o)

也许您需要
$mysqli->close()在进行新查询或清除缓存之前-不确定这是否相关,但无法找到mysqli版本:您应该使用准备好的语句。在循环外准备语句,在循环内执行。如果这有什么不同,我正在使用zen cart。。。。。。我尝试了
$mysqli->close()
并按照您的建议清除缓存,但没有成功。我不知道如何在循环之外准备语句,然后包含它们,您能使用我的代码提供一个示例吗?我不是这方面的佼佼者:o(n谢谢你的帮助,非常感谢。也许你需要
$mysqli->close();
在进行新查询或清除缓存之前-不确定这是否相关,但找不到mysqli版本:您应该使用准备好的语句。在循环外准备语句,在循环内执行。如果有任何不同,我使用zen cart……我尝试了
$mysqli->close()
并按照您的建议清除缓存,但这不起作用。我不知道如何在循环之外准备语句,然后将它们包括在内,
while ($total_debt > 0) {
    $get_dp_accounts_list_query = "SELECT account_id
        FROM money_debt_planner
        WHERE customer_id = '".$_SESSION['customer_id']."'
        GROUP BY account_id";
    $get_dp_accounts_list = $db->Execute($get_dp_accounts_list_query);
    while (!$get_dp_accounts_list->EOF) {
        $get_dp_accounts_listArray[] = array('account_id'=>$get_dp_accounts_list->fields['account_id']);
        $get_dp_accounts_list->MoveNext();
    }
    foreach($get_dp_accounts_listArray as $acc_list) {
        $get_last_dp_entry_query = "SELECT *
            FROM money_debt_planner
            WHERE customer_id = '".$_SESSION['customer_id']."'
            AND account_id = '".$acc_list['account_id']."'
            ORDER BY line_id DESC";
        $get_last_dp_entry = $db->Execute($get_last_dp_entry_query);

        if($get_last_dp_entry->fields['end_debt_balance'] <> 0) {
            // calculate the interest this period
            $accounts_balance = $get_last_dp_entry->fields['end_debt_balance'] + $get_last_dp_entry->fields['estimated_spending'];

            $min_pay = $get_last_dp_entry->fields['min_pay_amount'];
            $min_pay_rate = $get_last_dp_entry->fields['min_pay_rate'];
            $interest_rate = $get_last_dp_entry->fields['interest_rate'];

            $int_rate = $interest_rate /100;
            $int_rate_a = $int_rate + 1;
            $int_value_b = $accounts_balance ;
            $int_value_c = ($int_rate_a * $int_value_b) - $int_value_b . '       ';
            $int_value_d = $int_value_c / 12;

            $statement_balance = $accounts_balance + $int_value_d;

            $min_pay_rate = ($statement_balance) * $min_pay_rate / 100;

            if($min_pay_rate < $min_pay) {
                $new_bill_amount = $min_pay;
            } else { 
                $new_bill_amount = $min_pay_rate;
            }
            if(($statement_balance) <= ($min_pay_rate) && ($statement_balance) <= $min_pay) { 
                $new_bill_amount = $statement_balance;
            }

            // next pay date 
            $next_due_day1 = date('d', strtotime ( $get_last_dp_entry->fields['date'] ));
            $next_due_year_month1 = date('Y-m', strtotime ( $get_last_dp_entry->fields['date'] ));

            $next_due_month_a_1 = strtotime ( "+ 1 month" , strtotime ( $next_due_year_month1 ) ) ;
            $next_due_month_b_1 = date ( 'Y-m' , $next_due_month_a_1);
            $total_days_in_this_month = date('t', strtotime($next_due_month_b_1) );

            if($next_due_day1 >= $total_days_in_this_month) {
                $next_due_date_a_1 = $total_days_in_this_month;
            } else { 
                $next_due_date_a_1 = $next_due_day1;
            }

            $payment_date_from_account1 = $next_due_month_b_1 .'-' . $next_due_date_a_1;
            $next_due1a = strtotime ( $payment_date_from_account1 ) ;
            $next_due1 = date ( 'Y-m-d' , $next_due1a );

            $dp_pay_date = $next_due1; // this will be 1 month from last entry
            $interest_this_period = $int_value_d; // this will be interest on last end balance + est spending
            $payment_this_period = $new_bill_amount; // this will be the min payment allowed including any over credit amount
            $end_balance = ''; // this will be current open balance + spending + interest - payment

            $sql = "INSERT INTO `money_debt_planner` (`customer_id`, `account_id`, `date`, `open_debt_balance`, `interest_rate`, `min_pay_rate`, `min_pay_amount`, `credit_limit`, `estimated_spending`, `interest_this_period`, `payment_this_period`, `end_debt_balance`)
            VALUES ('".$_SESSION['customer_id']."', '".$acc_list['account_id']."', '".$dp_pay_date."', '".$get_last_dp_entry->fields['end_debt_balance']."', '".$get_last_dp_entry->fields['interest_rate']."', '".$get_last_dp_entry->fields['min_pay_rate']."', '".$get_last_dp_entry->fields['min_pay_amount']."', '".$get_last_dp_entry->fields['credit_limit']."', '".$get_last_dp_entry->fields['estimated_spending']."', '".$interest_this_period."', '".$payment_this_period."', '".$end_balance."')";
            $db->Execute($sql);
        } // end if balance zero
    } // end account list

    // to do this will be total debt balance utstanding
    $total_debt = $total_debt - 1000;
}