신뢰할 예기치 않은 결과. 때로는 100 씩 증가 시키며 때로는 전혀 업데이트하지 않는 경우도 있습니다.이 같은 PHP에서 MySQL로 값을 보낼 때 PHP와보다 큰 100 조는
$stmt->prepare("update bank set cash = ?");
$stmt->bind_param('i',$new_cash_amt);
$stmt->execute();
신뢰할 예기치 않은 결과. 때로는 100 씩 증가 시키며 때로는 전혀 업데이트하지 않는 경우도 있습니다.이 같은 PHP에서 MySQL로 값을 보낼 때 PHP와보다 큰 100 조는
$stmt->prepare("update bank set cash = ?");
$stmt->bind_param('i',$new_cash_amt);
$stmt->execute();
준비된 문은 숫자가 몇 억보다 큰 도착하면 다른,하지만 신뢰할 수없는 결과가 있습니다.
or die(mysql_error());
을 사용하여 버그를 확인하십시오.수정 :
$amount = 17;
$mysqli->query("
update player_stats
set cash = cash + $amount
where username = 'cheater2'
") or die(mysql_error());
당신은 늘 PHP는 변수를 구문 분석 작은 따옴표를 사용하고 있습니다. cash=cash+$amount
을 문자열로 찾고 데이터를 보유하는 변수가 아닙니다.
여기 내 자신의 질문에 대답하고 있습니다.
그것은 당신이 이런 식으로 값을 전달할 때 밝혀 :
huge_number입니다 : 1.0000000000001E + 17
정확한을
이$huge_number = 100000000000;
echo "The huge_number is: $huge_number";
그것은 다음을 인쇄합니다 값은이 변환에서 손실됩니다. 그래서 100의 배수로 값이 증분되는 경우가 있으며 다른 경우에는 그렇지 않습니다.
준비된 문과 마찬가지로 32 비트 정수보다 큰 값 (바인딩 된 매개 변수의 형식으로 'i'를 붙인 이후)은 예기치 않게 잘리고 변경됩니다. 그래서처럼 'D'로 새 값을 통과해야합니다.
$stmt->bind_param('d',$new_cash_amt); //This works correctly
'$ mysqli-> 쿼리 ($ 금액 '업데이트 player_stats 현금 = 현금 + 설정' '어디에 사용자 이름 = "cheater2"'.); ' –
db에서 지정한 int 또는 데이터 유형의 크기는 얼마입니까? –
내가 내 질문에 fubar'd 것 같습니다. mt_rand를 사용하여 변수를 얻은 다음 add_cash()로 보내면 10 또는 100의 간헐적 인 증분 만 업데이트됩니다. 유형에 문제가 있는지 궁금합니다. 이상하게도 다른 변수를 사용하여 add_cash를 실행하면이 문제가 발생하지 않습니다. 내 질문을 업데이트하고 있습니다. – Nelson