#24752 [Opn->Csd]: unknown column type "uniqueidentifier", type 35

From: Date: Wed, 23 Jul 2003 16:56:21 +0000
Subject: #24752 [Opn->Csd]: unknown column type "uniqueidentifier", type 35
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-44587@lists.php.net to get a copy of this message
 ID:               24752
 Updated by:       iliaa@php.net
 Reported By:      s dot sonnenberg at coolspot dot de
-Status:           Open
+Status:           Closed
 Bug Type:         MSSQL related
 Operating System: Linux
 PHP Version:      4.3.2
 New Comment:

This bug has been fixed in CVS.

In case this was a PHP problem, snapshots of the sources are packaged
every three hours; this change will be in the next snapshot. You can
grab the snapshot at http://snaps.php.net/.
 
In case this was a documentation problem, the fix will show up soon at
http://www.php.net/manual/.

In case this was a PHP.net website problem, the change will show
up on the PHP.net site and on the mirror sites in short time.
 
Thank you for the report, and for helping us make PHP better.




Previous Comments:
------------------------------------------------------------------------

[2003-07-22 08:29:36] s dot sonnenberg at coolspot dot de

Description:
------------
If you use the combination FreeTDS 0.61 + PHP 4.3.2 to access
data on a MS SQL Server 2000, columns of type "uniqueidentifier" (type
35) or causing php to barf, and you are not able to handle them.
I got it to work after a applying a patch, that I figure out :

for ext/mssql/php_mssql.c :

--- php-4.3.2/ext/mssql/php_mssql.c     2003-05-21 02:06:41.000000000
+0200
+++ php-4.3.2-LOCAL/ext/mssql/php_mssql.c       2003-07-22
13:34:35.000000000 
+0200
@@ -800,6 +800,15 @@
                        Z_DVAL_P(result) = (double) floatcol8(offset);
                        Z_TYPE_P(result) = IS_DOUBLE;
                        break;
+               case SQLUNIQUE:
+                       {
+                               int length = 16;
+                               char *data = charcol(offset);
+                               Z_STRVAL_P(result) =
estrndup(data,length);
+                               Z_STRLEN_P(result) = length;
+                               Z_TYPE_P(result) = IS_STRING;
+                       }
+                       break;
                case SQLVARBINARY:
                case SQLBINARY:
                case SQLIMAGE: {

and for ext/mssql/php_mssql.h

--- php-4.3.2/ext/mssql/php_mssql.h     2003-02-09 08:49:34.000000000
+0100
+++ php-4.3.2-LOCAL/ext/mssql/php_mssql.h       2003-07-22
13:32:42.000000000 
+0200
@@ -32,7 +32,7 @@
 #endif
  
  
-#define MSSQL_VERSION "7.0"
+#define MSSQL_VERSION "8.0"
 #include "sqlfront.h"
 #include "sqldb.h"
  
@@ -59,6 +59,7 @@
 #define SQLIMAGE SYBIMAGE
 #define SQLBINARY SYBBINARY
 #define SQLVARBINARY SYBVARBINARY
+#define SQLUNIQUE SYBUNIQUE
 #define DBERRHANDLE(a, b) dberrhandle(b)
 #define DBMSGHANDLE(a, b) dbmsghandle(b)
 #define DBSETOPT(a, b, c) dbsetopt(a, b, c, -1)


It works for me :
RedHat 9.0 + updates
FreeTDS 0.61 (configure --prefix=/usr/local/freetds/0.61/
--enable-msdblib 
--with-tdsver=8.0)
PHP 4.3.2 (configure --prefix=/usr/local/php/4.3.2/ 
--with-mssql=/usr/local/freetds/0.61/ --without-mysql)
Windows 2000 BackOffice Server SP 4 + MS SQL Server 2000 SP 3

Perhaps +#define MSSQL_VERSION "8.0" is a bit "heavy", but looks nicer
in 
phpinfo() ...

You can test it, if you fetch such a field, and then pass that value to
mssql_guid_string. The output must be equal to CAST (field as
CHAR(64)), where field is of the uniqueidentifier type.



Reproduce code:
---------------
$sql = "select * from tablename";
$res = mssql_query($sql);


/* causes php to barf, if you have a field of type uniqueidentifier */



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


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



Thread (12 messages)

« previous php.bugs (#44587) next »