PHP 4.0 Bug #9397 Updated: odbc_setoption() cannot accept string value (patch included)
| From: | kara@php.net | Date: | Thu, 22 Feb 2001 16:35:25 +0000 |
| Subject: | PHP 4.0 Bug #9397 Updated: odbc_setoption() cannot accept string value (patch included) | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-47262@lists.php.net to get a copy of this message | ||
ID: 9397
Updated by: kara
Reported By: clin@lion.syscom.com.tw
Old-Status: Open
Status: Feedback
Bug Type: ODBC related
Assigned To:
Comments:
In ODBC 2.x it is not possible to pass string values to
SQLSetStmtOption(). It is possible with ODBC 3,
SQLSetStmtAttr() has an additional parameter to specify the
string length.
By the way: I couldn't find SQL_EXTENSION_NAME as possible
attribute to SQLSetStmtAttr(). What's it's pupose?
Previous Comments:
---------------------------------------------------------------------------
[2001-02-22 04:55:38] clin@lion.syscom.com.tw
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 ***********
---------------------------------------------------------------------------
ATTENTION! Do NOT reply to this email!
To reply, use the web interface found at http://bugs.php.net/?id=9397&edit=2