Edit report at http://bugs.php.net/bug.php?id=12876&edit=1

 ID:                 12876
 Comment by:         pablo dot orensanz at gmail dot com
 Reported by:        ash at freaky-namuh dot com
 Summary:            Comparison with zero (0) returns TRUE
 Status:             Bogus
 Type:               Bug
 Package:            Strings related
 Operating System:   Linux Debian 2.2r2 (testing)
 PHP Version:        4.0.6
 Block user comment: N
 Private report:     N

 New Comment:

Hi!

I solved it by always comparing text strings. What do you think?



'"'.$value1.'"' === '"'.$value2.'"'


Previous Comments:
------------------------------------------------------------------------
[2001-08-21 10:57:34] ash at freaky-namuh dot com

The above should have read pg_fetch_array not pg_fetch_row.



pg_fetch_array without setting result_type to PGSQL_ASSOC returns both field 
numbers and field names as array indexes.

------------------------------------------------------------------------
[2001-08-21 10:43:08] ash at freaky-namuh dot com

This never used to be the case.. < 4.0.4

So basically don't use == to compare strings?  Does PHP convert to numbers when 
doing 'test' == 'test'?



I have this situation



<?php

// snip



$row = pg_fetch_row($result, 0);



while( list($field, $value) == each($row) )

{

   if( $field == 'stateid' )

     echo get_state_selector($conn, $value);

   else

     echo $value;



}?>



pg_fetch_row by default returns keys as field names and as array elements.  
get_state_selector gets outputed for both $row[0] and $row[stateid].  I know I 
can change pg_fetch_row (which I will) to output field names only, but I 
haven't run into this in the past.  Has something changed?  (There was a point 
pre 4.0.3 where zero (0) didn't equal empty, and now it does.. as in 

$test = 0; 

if( empty($test) ) 

echo "blah"; 

)









------------------------------------------------------------------------
[2001-08-21 10:31:29] der...@php.net

You miss something :) Strings will be converted to a number first, which is not 
possible. The result of this conversion is 0, and (0 == 0) => TRUE.



Derick

------------------------------------------------------------------------
[2001-08-21 10:27:54] ash at freaky-namuh dot com

When strings are compared to 0, they always return TRUE.



<?php

$test = 'somestring';

if( $test == 'somestring')

echo "Match 1\n";

if( $test == 0 )

echo "Match 2\n";

if( $test == 1 )

echo "Match 3\n";

if( $test != 0 )

echo "Match 4\n";

if( $test != 'somestring' )

echo "Match 5\n";

if( $test != 1 )

echo "Match 6\n";

?>



Expected Output:

Match 1





Actual Ouput:

Match 1

Match 2

Match 6



Is there something I'm missing?



------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=12876&edit=1

Reply via email to