ID: 26820 Comment by: egarcia at egm dot as Reported By: subspace at wanadoo dot nl Status: Assigned Bug Type: MSSQL related Operating System: Debian Linux 2.4.21 PHP Version: 4CVS-2004-02-06 Assigned To: fmk New Comment:
I have the same problem in Windows XP, Windows 2000, using MSSQL 2000. I call a store procedure that returns data using rollup over a bit field. In the sumarized data MSSQL return NULL in the bit field but PHP give me a zero (0). The expected result is to get the NULL value data. The example in the posted message is TOTALLY replicable in my system. Previous Comments: ------------------------------------------------------------------------ [2004-02-06 13:44:31] subspace at wanadoo dot nl ./configure --with-mssql --without-mysql The mysql option is irrelevant though. FreeTDS package installed: freetds-dev 0.61-5 X-Powered-By: PHP/4.3.5RC2 bit: int(0) tiny: int(0) bit: int(1) tiny: int(1) bit: int(0) tiny: NULL ------------------------------------------------------------------------ [2004-02-06 11:35:33] [EMAIL PROTECTED] One more information is needed: what was the configure line used to configure PHP? ------------------------------------------------------------------------ [2004-01-19 12:21:11] [EMAIL PROTECTED] Just to clarify: Expected behaviour is that return values are NULL for NULL. (definately NOT bool(false) like you suggested in your first comment) ------------------------------------------------------------------------ [2004-01-19 01:03:59] subspace at wanadoo dot nl Accidentally clicked hit Submit before I was done typing.. Using 4.3.5RC2-dev CVS 200401190430 and Debian package freetds-dev 0.61-5 the result is now: X-Powered-By: PHP/4.3.5RC2-dev bit: int(0) tiny: int(0) bit: int(1) tiny: int(1) bit: int(0) tiny: NULL All the strings are now ints, but as you can see the expected NULL value is still not there. ------------------------------------------------------------------------ [2004-01-06 15:56:15] subspace at wanadoo dot nl Description: ------------ Fields that have the SQL type 'bit' and are nullable return string(1) "0" for both 0 (false) and NULL values, when using mssql_fetch_row and similar. Expected behavior would be to return bool(false) for NULL values. Reproduce code: --------------- function vdump($value) { ob_start(); var_dump($value); $result = ob_get_contents(); ob_end_clean(); return trim($result); } $db = mssql_connect('servername', 'username', 'password'); mssql_query("CREATE TABLE #demo (bitfield BIT NULL, tinyfield TINYINT NULL)", $db); mssql_query("INSERT INTO #demo (bitfield,tinyfield) VALUES (0, 0)", $db); mssql_query("INSERT INTO #demo (bitfield,tinyfield) VALUES (1, 1)", $db); mssql_query("INSERT INTO #demo (bitfield,tinyfield) VALUES (NULL, NULL)", $db); $result = mssql_query("SELECT * FROM #demo", $db); while ($row = mssql_fetch_row($result)) echo "bit: " . vdump($row[0]) . "\t tiny: " . vdump($row[1]) . "\n"; mssql_query("DROP TABLE #demo", $db); Expected result: ---------------- bit: string(1) "0" tiny: string(1) "0" bit: string(1) "1" tiny: string(1) "1" bit: bool(false) tiny: bool(false) Actual result: -------------- bit: string(1) "0" tiny: string(1) "0" bit: string(1) "1" tiny: string(1) "1" bit: string(1) "0" tiny: bool(false) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=26820&edit=1