#29292 [Com]: Single space character returned instead of empty string
| From: | vikinoha at yahoo dot com | Date: | Mon, 30 Aug 2004 15:41:48 +0000 |
| Subject: | #29292 [Com]: Single space character returned instead of empty string | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-65464@lists.php.net to get a copy of this message | ||
ID: 29292
Comment by: vikinoha at yahoo dot com
Reported By: jmelville at selectaustralasia dot com dot au
Status: Open
Bug Type: MSSQL related
Operating System: Windows 2000 Server SP4
PHP Version: 4.3.8
New Comment:
PHP 4.3.8
I am experiencing the same problem with non-empty string returned by a
query that should return an empty string.
I have tried to replace the php_mssql.dll file in version 4.3.8 with
the one from 4.3.3, but the problem remains with no change
whatsoever:(
If there is someone familiar with PHP sources, does the php_mssql.c
1.138 revision changes deal with this bug, or it is something
completely unrelated? And also, if the 'illia_0' change (pointed out by
richard dot quadling at bandvulc dot co dot uk) effectively removes this
bug (does it?), why is it then if'd out?
Thanks,
Viktor
Previous Comments:
------------------------------------------------------------------------
[2004-08-13 12:22:27] richard dot quadling at bandvulc dot co dot uk
Hi.
If the column contains NULL (using Enterprise Manager to enter CTRL+0),
then the output is correct.
But having to convert all '' to NULLs is not right.
Richard.
------------------------------------------------------------------------
[2004-08-13 09:48:32] richard dot quadling at bandvulc dot co dot uk
Hi.
Following script ...
<?php
$rConn = mssql_connect('localhost','PHPBB_User','PHPBB_User');
$rResults = mssql_query('SELECT user_icq,LEN(user_icq) AS user_icq_len
FROM PHPBB_User.phpbb_users');
while ($row = mssql_fetch_assoc($rResults))
{
var_export($row);
echo '<br />Length of user_icq = ' . strlen($row['user_icq']) .
'<br
/><br /><br />';
}
mssql_free_result($rResults);
mssql_close($rConn);
?>
produces output of ...
array ( 'user_icq' => ' ', 'user_icq_len' => 0, )
Length of user_icq = 1
array ( 'user_icq' => '1711757', 'user_icq_len' => 7, )
Length of user_icq = 7
array ( 'user_icq' => ' ', 'user_icq_len' => 0, )
Length of user_icq = 1
Which is clearly wrong! The length being returned by SQL is 0, the data
being returned by PHP is ' '. The data via enterprise manager is ''.
I'm using Sambar Server V6.1 Beta 3, PHP V5.0.0 (about to upgrade to
V5.0.1). MS SQL 2000 SP3 Developer Edition all on a Windows XP Pro. But
none of this seems to be making any difference. According to all the
comments made, this was broken a LONG time ago.
It seems that a small patch HAS been applied to the source (php_mssql.c
line 793-797), but is under a compiler directive of ilia_0. (Is this
Ilia Alshanetsky? If so, great article in PHP|Architect about
contexts!!!).
The code is in the php_mssql_get_column_content_with_type() function.
...
case SQLTEXT: {
int length;
char *data = charcol(offset);
length=dbdatlen(mssql_ptr->link,offset);
#if ilia_0
while (length>0 && data[length-1] == ' ') { /* nuke trailing
whitespace */
length--;
}
#endif
ZVAL_STRINGL(result, data, length, 1);
break;
}
...
The macro ZVAL_STRINGL is ...
#define ZVAL_STRINGL(z, s, l, duplicate) { \
char *__s=(s); int __l=l; \
(z)->value.str.len = __l; \
(z)->value.str.val = (duplicate?estrndup(__s, __l):__s); \
(z)->type = IS_STRING; \
}
If someone can recompile the code, can they do so WITHOUT the directive
first but put in some debugs (forget thread safeness, only testing) and
show what the value of length in the assignment from
dbdatlen(mssql_ptr->link,offset) and what happens if the macro is
called with a 0 rather than a 1.
------------------------------------------------------------------------
[2004-08-10 18:22:55] chris at fjmercedes dot com
I'm experiencing the same problem with the latest CVS of PHP5 and no
php_mssql.dll extensions from older versions are compatable with PHP5.
------------------------------------------------------------------------
[2004-08-10 16:38:51] jeremyirons at genevus dot com
I've been having the same problem with 4.3.8. I swapped php_mssql.dll
with versions from 4.3.7, 4.3.6, 4.3.5, 4.3.4, and 4.3.3. The space
problem went away at 4.3.3 only.
------------------------------------------------------------------------
[2004-07-26 14:06:00] egarcia at egm dot as
I have the same problem, this is related to the 4.3.8.
To resolve for now, I'm using the mssql.dll extension from the 4.3.7
with the 4.3.8 with out problems.
In the Zend Debugger now I see the nulls like null, no like " " with
the 4.3.8 version.
I hope that this litte trick can be usefull meanwhile.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/29292
--
Edit this bug report at http://bugs.php.net/?id=29292&edit=1