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]