[PATCH] FreeTDS-Compatible DB_mssql::tableInfo()

From: Date: Mon, 29 Dec 2003 22:16:24 +0000
Subject: [PATCH] FreeTDS-Compatible DB_mssql::tableInfo()
Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-24654@lists.php.net to get a copy of this message
The current DB_mssql::tableInfo() uses mssql_field_name(), mssql_field_type() and mssql_field_length() to get field information. These functions don't work when using FreeTDS/Sybase extensions. The patch below uses mssql_fetch_field() instead, which I believe should work with both FreeTDS and php_mssql.dll. Note that I haven't tested that it works on Windows, since I don't have a Windows-based PHP installation readily available. ---cut here--- Index: mssql.php =================================================================== RCS file: /repository/pear/DB/DB/mssql.php,v retrieving revision 1.19 diff -u -r1.19 mssql.php --- mssql.php 5 Dec 2003 22:00:14 -0000 1.19 +++ mssql.php 29 Dec 2003 22:04:31 -0000 @@ -493,9 +493,12 @@ for ($i=0; $i<$count; $i++) { $res[$i]['table'] = (is_string($result)) ? $result : ''; - $res[$i]['name'] = @mssql_field_name($id, $i); - $res[$i]['type'] = @mssql_field_type($id, $i); - $res[$i]['len'] = @mssql_field_length($id, $i); + + $fieldInfo=mssql_fetch_field($id,$i); + $res[$i]['name'] = $fieldInfo['name']; + $res[$i]['type'] = $fieldInfo['type']; + $res[$i]['len'] = $fieldInfo['max_length']; + // We only support flags for tables $res[$i]['flags'] = is_string($result) ? $this->_mssql_field_flags($result, $res[$i]['name']) : ''; } @@ -505,10 +508,13 @@ for ($i=0; $i<$count; $i++) { $res[$i]['table'] = (is_string($result)) ? $result : ''; - $res[$i]['name'] = @mssql_field_name($id, $i); - $res[$i]['type'] = @mssql_field_type($id, $i); - $res[$i]['len'] = @mssql_field_length($id, $i); - // We only support flags for tables + + $fieldInfo=mssql_fetch_field($id,$i); + $res[$i]['name'] = $fieldInfo['name']; + $res[$i]['type'] = $fieldInfo['type']; + $res[$i]['len'] = $fieldInfo['max_length']; + + // We only support flags for tables $res[$i]['flags'] = is_string($result) ? $this->_mssql_field_flags($result, $res[$i]['name']) : ''; if ($mode & DB_TABLEINFO_ORDER) { $res['order'][$res[$i]['name']] = $i; ---cut here--- -- Thomas Johnson <thomas@unifiedconsulting.com>

« previous php.pear.dev (#24654) next »