Ваша главная проблема здесь в том, что вы назвали переменную запроса SQL тем же именем, что и результат, который вы использовали в то время как l oop. Вы перезаписываете его строкой в строке 30:
30 $result = "UPDATE accounts SET money = (money + ".$cash_utbetaling[$i]."),
bullets = (bullets + ".$kuler_utbetaling[$i].") WHERE ID = ".$acc_id."";
Простой ответ - это опечатка, но вы допустили гораздо больше ошибок.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con = mysqli_connect("localhost", "root", "", "mafioso");
$con->set_charset('utf8mb4');
$cash_utbetaling[0] = 50000000;
$cash_utbetaling[1] = 40000000;
$cash_utbetaling[2] = 30000000;
$cash_utbetaling[3] = 20000000;
$cash_utbetaling[4] = 10000000;
$kuler_utbetaling[0] = 25;
$kuler_utbetaling[1] = 20;
$kuler_utbetaling[2] = 15;
$kuler_utbetaling[3] = 10;
$kuler_utbetaling[4] = 5;
$i = 0;
$result = mysqli_query($con, "SELECT * FROM daily_exp ORDER BY exp DESC LIMIT 5");
$daily_exp = $result->fetch_all(MYSQLI_ASSOC);
// prepare update
$stmt = $con->prepare('UPDATE accounts SET money = (money + ? ), bullets = (bullets + ? ) WHERE ID=?');
foreach ($daily_exp as $row_best) {
$stmt->bind_param('sss', $cash_utbetaling[$i], $kuler_utbetaling[$i], $row_best['acc_id']);
$stmt->execute();
$i++;
}
- Вам нужно включить отчеты об ошибках вместо использования
or die (mysqli_error())
, которое никогда не будет работать из-за отсутствия аргумента. - Не используйте пока l oop до go через результаты. Гораздо лучше получить все записи сразу или l oop в результате, используя
foreach
. Если бы вы воспользовались моим предложением, то, скорее всего, вы бы вообще избежали опечатки. - Вы должны использовать подготовленные заявления. В вашем коде значения являются целыми числами и константами, но я предполагаю, что в какой-то момент вы будете использовать переменные, что означает, что вам нужно использовать заполнители и параметры.
- Запрос SELECT внутри l oop ничего не делал, поэтому я удалил его из своего ответа.
- Вам следует избегать проблемы N + 1 запросов. Попробуйте сделать то же самое в одном запросе, только если это возможно.