From 2f3f629fd4a6b80d2c12fb1b13c955cbefd9b805 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 5 Mar 2011 23:07:45 +0000 Subject: [PATCH] - Fixed bug #54167 (PDO_DBLIB returns null on SQLUNIQUE field) # initial patch by: mjh at hodginsmedia dot com (5.3) # trunk version by me --- NEWS | 3 +++ ext/pdo_dblib/dblib_stmt.c | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 161d8c830c..54e097817c 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,9 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2011, PHP 5.3.6 +- PDO DBLib driver: + . Fixed bug #54167 (PDO_DBLIB returns null on SQLUNIQUE field). + (mjh at hodginsmedia dot com, Felipe) 03 Mar 2011, PHP 5.3.6RC2 - Zend Engine: diff --git a/ext/pdo_dblib/dblib_stmt.c b/ext/pdo_dblib/dblib_stmt.c index 2f771609b7..e7c8d9e9db 100644 --- a/ext/pdo_dblib/dblib_stmt.c +++ b/ext/pdo_dblib/dblib_stmt.c @@ -25,6 +25,7 @@ #include "php.h" #include "php_ini.h" +#include "ext/standard/php_string.h" #include "ext/standard/info.h" #include "pdo/php_pdo.h" #include "pdo/php_pdo_driver.h" @@ -67,7 +68,6 @@ static int pdo_dblib_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC) static int pdo_dblib_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC) { - pdo_dbh_t *dbh = stmt->dbh; pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data; pdo_dblib_db_handle *H = S->H; RETCODE resret, ret; @@ -174,6 +174,23 @@ static int pdo_dblib_stmt_execute(pdo_stmt_t *stmt TSRMLS_DC) val->len = spprintf(&val->data, 0, "%.4f", money_value); } break; +#ifdef SQLUNIQUE + case SQLUNIQUE: { +#else + case 36: { /* FreeTDS hack, also used by ext/mssql */ +#endif + val->len = 36+1; + val->data = emalloc(val->len + 1); + + /* uniqueidentifier is a 16-byte binary number, convert to 32 char hex string */ +#ifdef SQLUNIQUE + val->len = dbconvert(NULL, SQLUNIQUE, dbdata(H->link, i+1), dbdatlen(H->link, i+1), SQLCHAR, val->data, val->len); +#else + val->len = dbconvert(NULL, 36, dbdata(H->link, i+1), dbdatlen(H->link, i+1), SQLCHAR, val->data, val->len); +#endif + php_strtoupper(val->data, val->len); + break; + } default: if (dbwillconvert(S->cols[i].coltype, SQLCHAR)) { val->len = 32 + (2 * dbdatlen(H->link, i+1)); -- 2.50.1