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]

Reply via email to