ID: 14278
User updated by: [EMAIL PROTECTED]
Old Summary: % and / bug with INTEGERs!
Reported By: [EMAIL PROTECTED]
Old Status: Closed
Status: Open
Bug Type: Math related
Operating System: Linux 2.2.19
PHP Version: 4.0.6
New Comment:
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!
Previous Comments:
------------------------------------------------------------------------
[2001-12-20 12:48:09] [EMAIL PROTECTED]
No feedback. Closing.
------------------------------------------------------------------------
[2001-11-29 15:42:41] [EMAIL PROTECTED]
E:\php>php -v
4.0.6
E:\php>php -q test.php
101110 22
3888 14
149 19
5 5
0 0
0 0
AAFTOW
No matter how many times I run this script I always get this. Also
tested it on Linux (2.4), with PHP 4.2.0-dev and it works.
Please try a newer version and see if that fixes the problem you're
having. http://www.php.net/~zeev/php-4.1.0RC3.tar.gz or
http://snaps.php.net/php4-latest.tar.gz
-Chris
------------------------------------------------------------------------
[2001-11-29 05:27:51] [EMAIL PROTECTED]
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
------------------------------------------------------------------------
Edit this bug report at http://bugs.php.net/?id=14278&edit=1
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]