Обновление большого количества в MySQL больше 100 трлн с PHP ненадежно

Когда я отправляю значение в MySQL в PHP следующим образом:

$mysqli->query("update bank set cash = $cash");

Он работает хорошо для меньших чисел, но все, что 100 триллионов или больше, дает неожиданные результаты. Иногда он обновляет число с шагом 100, а иногда нет вообще.

Готовое утверждение также дает другие, но ненадежные результаты, когда число становится больше пары миллиардов:

$stmt->prepare("update bank set cash = ?");
$stmt->bind_param('i',$new_cash_amt);
$stmt->execute();

3 ответа

  1. Используйте двойные кавычки.
  2. использование or die(mysql_error()); чтобы увидеть вашу ошибку.
  3. Прекратить использование функции mysql*, скоро будет устаревшим.

Fix:

$amount = 17;
$mysqli->query("
        update player_stats 
        set cash = cash + $amount 
        where username = 'cheater2'
") or die(mysql_error());

Вы используете одинарные кавычки, которые не анализируют переменную php. Это ищет cash=cash+$amount в виде строки, а не переменной, содержащей данные.

Я отвечаю на свой вопрос здесь.

Оказывается, когда вы передаете значения, как это:

$huge_number = 100000000000012345;
echo "The huge_number is: $huge_number";

Будет напечатано следующее:

Огромный номер: 1.0000000000001E+17

Точное значение теряется в этом преобразовании. Вот почему значение увеличивается в несколько раз, иногда, а не в других случаях.

Как и в случае с подготовленным оператором, любые значения, превышающие 32-битное целое число (поскольку в качестве параметра в связанном параметре я поместил "i"), будут неожиданно обрезаны и изменены. Я должен был передать новое значение как 'd', вот так:

$stmt->bind_param('d',$new_cash_amt); //This works correctly
Другие вопросы по тегам