I am providing all my code. I have traced it to the code at the bottom after the functions
Code: Select all
<?php
include 'inc/database.class.php';
function bind_result_array($stmt) {
$meta = $stmt->result_metadata();
$result = array();
while ($field = $meta->fetch_field()) {
$result[$field->name] = NULL;
$params[] = &$result[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
return $result;
}
function getCopy($row) {
return array_map(create_function('$a', 'return $a;'), $row);
}
function get_active_accounts() {
global $conn;
$accounts = array();
$sql = 'SELECT * FROM accounts WHERE acct_status = "Active"';
$qry = $conn->query($sql);
if ($qry === false) {
die('Error: ' . $conn->error . '<br/><i>' . $sql . '</i>');
}
while($row = $qry->fetch_assoc())
$accounts[] = $row;
$qry->free();
return $accounts;
}
function get_account_plans($account) {
global $conn;
$plans = array();
$sql = 'SELECT
inv.id,
inv.username,
inv.user_id,
inv.plan_id,
inv.plan_name,
inv.total_invest,
inv.rate,
inv.`date`,
inv.compound_rate,
plans.parent,
packages.days
FROM
investments AS inv
INNER JOIN
plans ON inv.plan_id = plans.id
INNER JOIN
packages ON plans.parent = packages.id
WHERE
inv.user_id = ?
AND inv.end_date > NOW()';
$stmt = $conn->prepare($sql);
if ($stmt === false) {
die('Error: ' . $conn->error . '<br/><i>' . $sql . '</i>');
}
$stmt->bind_param('i', $account);
$stmt->execute();
$row = bind_result_array($stmt);
while($stmt->fetch())
$plans[] = getCopy($row);
$stmt->close();
return $plans;
}
function need_to_pay($last_paid, $pay_frequency) {
$last_payment_date = strtotime($last_paid);
$days_since_last_payment = floor((time() - $last_payment_date) / 86400);
if ($days_since_last_payment >= $pay_frequency)
return TRUE;
else
return FALSE;
}
function credit_account($acc_id, $inv_id, $inv_amount, $int_rate, $comp_rate) {
global $conn;
$sql = 'SELECT * FROM package_settings WHERE id = 1';
$qry = $conn->query($sql);
if ($qry === false) {
die('Error: ' . $conn->error . '<br/><i>' . $sql . '</i>');
}
$f_setting45 = $qry->fetch_assoc();
$qry->free();
$interest = $inv_amount * $int_rate / 100;
if($f_setting45['allow_compounding']) {
$comp_amount = $interest * $comp_rate / 100;
$int_left = $interest - $comp_amount;
echo 'Amount Invested: ' . $inv_amount;
echo '<br/>';
echo 'Interest Rate: ' . $int_rate;
echo '<br/>';
echo 'Amount of interest: ' . $interest;
echo '<br/>';
echo 'Compound Rate: ' . $comp_rate;
echo '<br/>';
echo 'Amount that will be added to invested amount: ' . $comp_amount;
echo '<br/>';
echo 'This is the left over: ' . $int_left;
echo '<br/>';
if($comp_rate == 100) {
$sql = 'UPDATE investments SET total_invest = total_invest + ' . $interest . ' WHERE id = ?';
$qry = $conn->prepare($sql);
if (!$qry) {
die('Error: ' . $conn->error . '<br/><i>' . $sql . '</i>');
}
$qry->bind_param('i', $inv_id);
$qry->execute();
$qry->close();
} else {
$sql = 'UPDATE investments SET invested = invested + ' . $comp_amount . ' WHERE id = ?';
$qry = $conn->prepare($sql);
if (!$qry) {
die('Error: ' . $conn->error . '<br/><i>' . $sql . '</i>');
}
$qry->bind_param('i', $inv_id);
$qry->execute();
$qry->close();
}
$sql = 'UPDATE accounts SET balance = balance + ' . $int_left . ', earned = earned + ' . $int_left . ' WHERE user_id = ?';
$qry = $conn->prepare($sql);
if (!$qry) {
die('Error: ' . $conn->error . '<br/><i>' . $sql . '</i>');
}
$qry->bind_param('i', $acc_id);
$qry->execute();
$qry->close();
return $int_left;
} else {
$interest = $inv_amount * $int_rate / 100;
$sql = 'UPDATE accounts SET balance = balance + ' . $interest . ', earned = earned + ' . $interest . ' WHERE user_id = ?';
$qry = $conn->prepare($sql);
if (!$qry) {
die('Error: ' . $conn->error . '<br/><i>' . $sql . '</i>');
}
$qry->bind_param('i', $acc_id);
$qry->execute();
$qry->close();
return $interest + $inv_amount;
}
}
function update_pay_date($investment) {
global $conn;
$sql = 'UPDATE investments SET `date` = NOW() WHERE id = ?';
$stmt = $conn->prepare($sql);
if ($stmt === false) {
die('Error: ' . $conn->error . '<br/><i>' . $sql . '</i>');
}
$stmt->bind_param('i', $investment);
$stmt->execute();
$stmt->close();
}
$sql = "SELECT * FROM package_settings WHERE id = 1";
$qry = $conn->query($sql);
if ($qry === false) {
die('Error: ' . $conn->error . '<br/><i>' . $sql . '</i>');
}
$pack_settings = $qry->fetch_assoc();
$qry->free();
$is_need_to_pay = false;
$debug = false;
if($pack_settings['week_pay_only'] == 1) {
$day_of_week = date("l");//get todays weekday
if(($day_of_week == 'Saturday') || ($day_of_week == 'Sunday'))
echo 'Today is a weekend. Come back monday. You wont get paid today';
else
$is_need_to_pay = true;
} else
$is_need_to_pay = true;
if ($is_need_to_pay) {
$to_pay = array();
$accounts = get_active_accounts();
if ($debug === true)
echo "Active accounts:<br />";
foreach ($accounts as $account) {
if ($debug === true)
echo $account['id'] . "<br />";
$plan = get_account_plans($account['user_id']);
if (!empty($plan))
$to_pay[] = $plan;
}
if ($debug === true)
echo '<hr />Accounts to be paid:<br /><br />';
foreach ($to_pay as $payee) {
foreach ($payee as $entry) {
if (need_to_pay($entry['date'], $entry['days']) === true) {
if ($debug === true)
echo 'Account: {' . $entry['user_id'] . '}<br /><br />';
$earn = credit_account($entry['user_id'], $entry['id'], $entry['total_invest'], $entry['rate'], $entry['compound_rate']);
update_pay_date($entry['id']);
$sql = 'INSERT INTO earnings (id, user_id, amount, plan, date) VALUES (null, IFNULL(?, user_id), IFNULL(?, amount), IFNULL(?, plan), NOW())';
$stmt = $conn->prepare($sql);
if (!$stmt) {
die('Error: ' . $conn->error . '<br/><i>' . $sql . '</i>');
}
$stmt->bind_param('sss', $entry['user_id'], $earn, $entry['plan_name']);
$stmt->execute();
$stmt->close();
} // if (need_to_pay...
} // foreach ($payee...
} // foreach ($to_pay...
$today = date("Y-m-d", time());
echo $today;
} //if ($is_need_to_pay)
?>This is written with mysqli
The error I get is
Fatal error: Out of memory (allocated 524288) (tried to allocate 4294967296 bytes) in /home/awesomes/public_html/ultra/index_cron.php on line 16
the code on line 16 is
call_user_func_array(array($stmt, 'bind_result'), $params);
any help would be great