|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2001-11-29 05:27 UTC] pumuckel at metropolis dot de
Sometimes (1 - 10 times a day) I get a strange error on one of my production servers. See this function:
function MakeHash($num) {
$ret = "";
$ca = array();
for ($i = 0; $i < 6; $i++) {
$c = $num % 26;
$ca[] = "$num $c";
$ret = sprintf("%c", 65+$c).$ret;
$num = ($num-$c)/ 26;
}
// Send $ca array via email to me.... (removed)
return $ret;
}
Sometimes calling this function with an INT it calculates wired results... If that happens I mail the $ca array to myself and see what it does:
101110 19 (MEANS: 101110 % 26 is 19!? That's wrong, it is 22)
38888588 24 (MEANS 101110 / 26 is 38888588, but it is 3888)
1495714 12 ...
57527 15
2212 2
85 7
What goes wrong? In the beginning the % result is wrong, and then the division result is wrong too... any suggestions!?
/mike
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Wed Oct 29 07:00:01 2025 UTC |
After some more investigation on this bug I noticed following: I have an OCI insert statement executed with a 'RETURNING INTO' clause. The value which is returned is a oracle DB entry of type NUMBER. I expected to have the returned value in PHP to be a number as well. BUT it is a string! Some more output I produced in my script is: <? echo("$num (type: ".gettype($num)."[".strlen($num)."] - ".($num*1).")"); ?> The result (when the error occures): 106851 (type: string[6] - 1068514) As you can see the value of the $num variable changes while automatic type casting from string to int is executed. The reason for the NEW (bigger) value is possibly a not null terminated string value returned by the OCI interface. My suggestion: While typecasting from string to int an extra check should be done (e.g. detect if there is a null terminated string and if not: terminate it). Thanks for your patch!