From:             [EMAIL PROTECTED]
Operating system: Linux
PHP version:      4.0.4pl1
PHP Bug Type:     ODBC related
Bug description:  odbc_setoption() cannot accept string value (patch included)

When I tried to use odbc_setoption() to set file extension
name:

odbc_setoption($sth, 2, 2001, "JPG"); /*2001 means SQL_EXTENSION_NAME*/

php will hang.

The patch followed:

****** BEGIN PATCH ***********

--- php_odbc.c.old      Wed Jan  3 23:04:50 2001
+++ php_odbc.c  Thu Feb 22 10:29:52 2001
@@ -2393,6 +2393,7 @@
        odbc_result     *result;
        RETCODE rc;
        pval **pv_handle, **pv_which, **pv_opt, **pv_val;
+       UDWORD val;
 
        if ( zend_get_parameters_ex(4, &pv_handle, &pv_which, &pv_opt, &pv_val) == 
FAILURE) {
                WRONG_PARAM_COUNT;
@@ -2400,7 +2401,20 @@
  
        convert_to_long_ex(pv_which);
        convert_to_long_ex(pv_opt);
+       switch (Z_TYPE_PP(pv_val)) {
+               case IS_LONG:
        convert_to_long_ex(pv_val);
+                       val = (*pv_val)->value.lval;
+                       break;
+               case IS_STRING:
+                       convert_to_string_ex(pv_val); 
+                       val = (UDWORD) (*pv_val)->value.str.val;
+                       break;
+               default:
+                       php_error(E_WARNING, "Unknown param type");
+                       RETURN_FALSE;
+                       break;
+       }
 
        switch ((*pv_which)->value.lval) {
                case 1:         /* SQLSetConnectOption */
@@ -2409,7 +2423,7 @@
                                php_error(E_WARNING, "Can't set option for persistent 
connection");
                                RETURN_FALSE;
                        }
-                       rc = SQLSetConnectOption(conn->hdbc, (unsigned 
short)((*pv_opt)->value.lval), (*pv_val)->value.lval);
+                       rc = SQLSetConnectOption(conn->hdbc, (unsigned 
+short)((*pv_opt)->value.lval), val);
                        if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
                                odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, 
"SetConnectOption");
                                RETURN_FALSE;
@@ -2418,7 +2432,7 @@
                case 2:         /* SQLSetStmtOption */
                        ZEND_FETCH_RESOURCE(result, odbc_result *, pv_handle, -1, 
"ODBC result", le_result);
                        
-                       rc = SQLSetStmtOption(result->stmt, (unsigned 
short)((*pv_opt)->value.lval), ((*pv_val)->value.lval));
+                       rc = SQLSetStmtOption(result->stmt, (unsigned 
+short)((*pv_opt)->value.lval), val);
 
                        if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
                                odbc_sql_error(result->conn_ptr->henv, 
result->conn_ptr->hdbc, result->stmt, "SetStmtOption");


****** END PATCH ***********


-- 
Edit Bug report at: http://bugs.php.net/?id=9397&edit=1



-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to