ssb Sun Jan 14 17:11:06 2001 EDT
Modified files:
/php4/ext/odbc php_odbc.c php_odbc.h
Log:
@- Added odbc_error() and odbc_errormsg() functions (Stig)
Index: php4/ext/odbc/php_odbc.c
diff -u php4/ext/odbc/php_odbc.c:1.69 php4/ext/odbc/php_odbc.c:1.70
--- php4/ext/odbc/php_odbc.c:1.69 Fri Jan 5 14:01:22 2001
+++ php4/ext/odbc/php_odbc.c Sun Jan 14 17:11:06 2001
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_odbc.c,v 1.69 2001/01/05 22:01:22 fmk Exp $ */
+/* $Id: php_odbc.c,v 1.70 2001/01/15 01:11:06 ssb Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -66,6 +66,8 @@
static unsigned char a3_arg3_force_ref[] = { 3, BYREF_NONE, BYREF_ALLOW, BYREF_FORCE
};
function_entry odbc_functions[] = {
+ PHP_FE(odbc_error, NULL)
+ PHP_FE(odbc_errormsg, NULL)
PHP_FE(odbc_setoption, NULL)
PHP_FE(odbc_autocommit, NULL)
PHP_FE(odbc_close, NULL)
@@ -319,7 +321,7 @@
{
ODBCLS_D;
#ifdef SQLANY_BUG
- HDBC foobar;
+ ODBC_SQL_CONN_T foobar;
RETCODE rc;
#endif
@@ -420,6 +422,8 @@
ODBCG(defConn) = -1;
ODBCG(num_links) = ODBCG(num_persistent);
+ memset(ODBCG(laststate), '\0', 6);
+ memset(ODBCG(lasterrormsg), '\0', SQL_MAX_MESSAGE_LENGTH);
return SUCCESS;
}
@@ -466,22 +470,38 @@
char errormsg[SQL_MAX_MESSAGE_LENGTH];
SWORD errormsgsize; /* Not used */
RETCODE rc;
+ ODBC_SQL_ENV_T henv;
+ ODBC_SQL_CONN_T conn;
ODBCLS_FETCH();
+ if (conn_resource) {
+ henv = conn_resource->henv;
+ conn = conn_resource->hdbc;
+ } else {
+ henv = SQL_NULL_HENV;
+ conn = SQL_NULL_HDBC;
+ }
+
/* This leads to an endless loop in many drivers!
*
while(henv != SQL_NULL_HENV){
do {
*/
- rc = SQLError(henv, conn, stmt, state,
- &error, errormsg, sizeof(errormsg)-1, &errormsgsize);
- if (func) {
- php_error(E_WARNING, "SQL error: %s, SQL state %s in %s",
- errormsg, state, func);
- } else {
- php_error(E_WARNING, "SQL error: %s, SQL state %s",
- errormsg, state);
- }
+ rc = SQLError(henv, conn, stmt, state,
+ &error, errormsg, sizeof(errormsg)-1, &errormsgsize);
+ if (conn_resource) {
+ memcpy(conn_resource->laststate, state, sizeof(state));
+ memcpy(conn_resource->lasterrormsg, errormsg, sizeof(errormsg));
+ }
+ memcpy(ODBCG(laststate), state, sizeof(state));
+ memcpy(ODBCG(lasterrormsg), errormsg, sizeof(errormsg));
+ if (func) {
+ php_error(E_WARNING, "SQL error: %s, SQL state %s in %s",
+ errormsg, state, func);
+ } else {
+ php_error(E_WARNING, "SQL error: %s, SQL state %s",
+ errormsg, state);
+ }
/*
} while (SQL_SUCCEEDED(rc));
}
@@ -591,7 +611,7 @@
rc = SQLTransact(conn->henv, conn->hdbc,
(UWORD)((type)?SQL_COMMIT:SQL_ROLLBACK));
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLTransact");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTransact");
RETURN_FALSE;
}
@@ -710,6 +730,7 @@
}
/* }}} */
+
/* {{{ proto int odbc_prepare(int connection_id, string query)
Prepares a statement for execution */
PHP_FUNCTION(odbc_prepare)
@@ -748,7 +769,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -764,7 +785,7 @@
*/
if (SQLSetStmtOption(result->stmt, SQL_CURSOR_TYPE,
SQL_CURSOR_DYNAMIC)
== SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, result->stmt, "
SQLSetStmtOption");
+ odbc_sql_error(conn, result->stmt, "
+SQLSetStmtOption");
SQLFreeStmt(result->stmt, SQL_DROP);
efree(result);
RETURN_FALSE;
@@ -780,10 +801,10 @@
case SQL_SUCCESS:
break;
case SQL_SUCCESS_WITH_INFO:
- odbc_sql_error(conn->henv, conn->hdbc, result->stmt, "SQLPrepare");
+ odbc_sql_error(conn, result->stmt, "SQLPrepare");
break;
default:
- odbc_sql_error(conn->henv, conn->hdbc, result->stmt, "SQLPrepare");
+ odbc_sql_error(conn, result->stmt, "SQLPrepare");
RETURN_FALSE;
}
@@ -923,7 +944,7 @@
rc = SQLFreeStmt(result->stmt, SQL_CLOSE);
if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr->henv, result->conn_ptr->hdbc,
result->stmt, "SQLFreeStmt");
+ odbc_sql_error(result->conn_ptr, result->stmt, "SQLFreeStmt");
}
rc = SQLExecute(result->stmt);
@@ -945,7 +966,7 @@
break;
case SQL_NO_DATA_FOUND:
case SQL_SUCCESS_WITH_INFO:
- odbc_sql_error(result->conn_ptr->henv, result->conn_ptr->hdbc,
result->stmt, "SQLExecute");
+ odbc_sql_error(result->conn_ptr, result->stmt, "SQLExecute");
break;
default:
RETVAL_FALSE;
@@ -1024,8 +1045,7 @@
if (!strncmp(state,"S1015",5)) {
sprintf(cursorname,"php_curs_%d", (int)result->stmt);
if (SQLSetCursorName(result->stmt,cursorname,SQL_NTS)
!= SQL_SUCCESS) {
- odbc_sql_error(result->conn_ptr->henv,
result->conn_ptr->hdbc,
- result->stmt,
"SQLSetCursorName");
+ odbc_sql_error(result->conn_ptr, result->stmt,
+"SQLSetCursorName");
RETVAL_FALSE;
} else {
RETVAL_STRING(cursorname,1);
@@ -1088,7 +1108,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -1104,7 +1124,7 @@
*/
if (SQLSetStmtOption(result->stmt, SQL_CURSOR_TYPE,
SQL_CURSOR_DYNAMIC)
== SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, result->stmt, "
SQLSetStmtOption");
+ odbc_sql_error(conn, result->stmt, "
+SQLSetStmtOption");
SQLFreeStmt(result->stmt, SQL_DROP);
efree(result);
RETURN_FALSE;
@@ -1122,7 +1142,7 @@
/* XXX FIXME we should really check out SQLSTATE with SQLError
* in case rc is SQL_SUCCESS_WITH_INFO here.
*/
- odbc_sql_error(conn->henv, conn->hdbc, result->stmt, "SQLExecDirect");
+ odbc_sql_error(conn, result->stmt, "SQLExecDirect");
SQLFreeStmt(result->stmt, SQL_DROP);
efree(result);
RETURN_FALSE;
@@ -1247,7 +1267,7 @@
buf, result->longreadlen + 1, &result->values[i].vallen);
if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr->henv, result->conn_ptr->hdbc, result->stmt,
"SQLGetData");
+ odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
efree(buf);
RETURN_FALSE;
}
@@ -1412,7 +1432,7 @@
buf,
result->longreadlen + 1, &result->values[i].vallen);
if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr->henv,
result->conn_ptr->hdbc, result->stmt, "SQLGetData");
+ odbc_sql_error(result->conn_ptr, result->stmt,
+"SQLGetData");
efree(buf);
RETURN_FALSE;
}
@@ -1632,7 +1652,7 @@
field, fieldsize, &result->values[field_ind].vallen);
if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr->henv, result->conn_ptr->hdbc,
result->stmt, "SQLGetData");
+ odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
efree(field);
RETURN_FALSE;
}
@@ -1675,7 +1695,7 @@
field, fieldsize, &result->values[field_ind].vallen);
if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr->henv, result->conn_ptr->hdbc,
result->stmt, "SQLGetData");
+ odbc_sql_error(result->conn_ptr, result->stmt, "SQLGetData");
efree(field);
RETURN_FALSE;
}
@@ -1781,7 +1801,7 @@
php_printf("<td>");
if (rc == SQL_ERROR) {
- odbc_sql_error(result->conn_ptr->henv,
result->conn_ptr->hdbc, result->stmt, "SQLGetData");
+ odbc_sql_error(result->conn_ptr,
+result->stmt, "SQLGetData");
php_printf("</td></tr></table>");
efree(buf);
RETURN_FALSE;
@@ -1880,7 +1900,7 @@
if (cur_opt != SQL_CUR_DEFAULT) {
rc = SQLSetConnectOption((*conn)->hdbc, SQL_ODBC_CURSORS, cur_opt);
if (rc != SQL_SUCCESS) { /* && rc != SQL_SUCCESS_WITH_INFO ? */
- odbc_sql_error((*conn)->henv, (*conn)->hdbc, SQL_NULL_HSTMT,
"SQLSetConnectOption");
+ odbc_sql_error(*conn, SQL_NULL_HSTMT, "SQLSetConnectOption");
SQLFreeConnect((*conn)->hdbc);
pefree(*conn, persistent);
return FALSE;
@@ -1918,7 +1938,7 @@
#endif
#endif
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error((*conn)->henv, (*conn)->hdbc, SQL_NULL_HSTMT,
"SQLConnect");
+ odbc_sql_error(*conn, SQL_NULL_HSTMT, "SQLConnect");
SQLFreeConnect((*conn)->hdbc);
pefree((*conn), persistent);
return FALSE;
@@ -2361,7 +2381,7 @@
((*pv_onoff)->value.lval) ?
SQL_AUTOCOMMIT_ON :
SQL_AUTOCOMMIT_OFF);
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "Set
autocommit");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "Set autocommit");
RETURN_FALSE;
}
RETVAL_TRUE;
@@ -2370,7 +2390,7 @@
rc = SQLGetConnectOption(conn->hdbc, SQL_AUTOCOMMIT, (PTR)&status);
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "Get
commit status");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "Get commit status");
RETURN_FALSE;
}
RETVAL_LONG((long)status);
@@ -2394,6 +2414,57 @@
}
/* }}} */
+static void php_odbc_lasterror(INTERNAL_FUNCTION_PARAMETERS, int mode)
+{
+ odbc_connection *conn;
+ pval **pv_handle;
+ char *ptr, *dest;
+ int argc, len;
+
+ argc = ZEND_NUM_ARGS();
+
+ if (argc > 1 || zend_get_parameters_ex(argc, &pv_handle)) {
+ WRONG_PARAM_COUNT;
+ }
+
+ if (mode == 0) { /* last state */
+ len = 6;
+ } else { /* last error message */
+ len = SQL_MAX_MESSAGE_LENGTH;
+ }
+ ptr = ecalloc(len + 1, 1);
+ if (argc == 1) {
+ ZEND_FETCH_RESOURCE2(conn, odbc_connection *, pv_handle, -1, "ODBC-Link",
+le_conn, le_pconn);
+ if (mode == 0) {
+ strncpy(ptr, conn->laststate, len);
+ } else {
+ strncpy(ptr, conn->lasterrormsg, len);
+ }
+ } else {
+ if (mode == 0) {
+ strncpy(ptr, ODBCG(laststate), len);
+ } else {
+ strncpy(ptr, ODBCG(lasterrormsg), len);
+ }
+ }
+ RETVAL_STRING(ptr, 0);
+}
+
+/* {{{ proto string odbc_error([int connection_id])
+ Get the last error code */
+PHP_FUNCTION(odbc_error)
+{
+ php_odbc_lasterror(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
+}
+/* }}} */
+
+/* {{{ proto string odbc_errormsg([int connection_id])
+ Get the last error message */
+PHP_FUNCTION(odbc_errormsg)
+{
+ php_odbc_lasterror(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);
+}
+/* }}} */
/* {{{ proto int odbc_setoption(int conn_id|result_id, int which, int option, int
value)
Sets connection or statement options */
@@ -2427,7 +2498,7 @@
}
rc = SQLSetConnectOption(conn->hdbc, (unsigned
short)((*pv_opt)->value.lval), (*pv_val)->value.lval);
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT,
"SetConnectOption");
+ odbc_sql_error(conn, SQL_NULL_HSTMT,
+"SetConnectOption");
RETURN_FALSE;
}
break;
@@ -2437,7 +2508,7 @@
rc = SQLSetStmtOption(result->stmt, (unsigned
short)((*pv_opt)->value.lval), ((*pv_val)->value.lval));
if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) {
- odbc_sql_error(result->conn_ptr->henv,
result->conn_ptr->hdbc, result->stmt, "SetStmtOption");
+ odbc_sql_error(result->conn_ptr, result->stmt,
+"SetStmtOption");
RETURN_FALSE;
}
break;
@@ -2501,7 +2572,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -2516,7 +2587,7 @@
type, SAFE_SQL_NTS(type));
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLTables");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTables");
efree(result);
RETURN_FALSE;
}
@@ -2584,7 +2655,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -2596,7 +2667,7 @@
column, SAFE_SQL_NTS(column));
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLColumns");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLColumns");
efree(result);
RETURN_FALSE;
}
@@ -2663,7 +2734,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -2675,7 +2746,7 @@
column, SAFE_SQL_NTS(column));
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT,
"SQLColumnPrivileges");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLColumnPrivileges");
efree(result);
RETURN_FALSE;
}
@@ -2761,7 +2832,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -2775,7 +2846,7 @@
ftable, SAFE_SQL_NTS(ftable) );
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT,
"SQLForeignKeys");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLForeignKeys");
efree(result);
RETURN_FALSE;
}
@@ -2840,7 +2911,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -2848,7 +2919,7 @@
rc = SQLGetTypeInfo(result->stmt, data_type );
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT,
"SQLGetTypeInfo");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLGetTypeInfo");
efree(result);
RETURN_FALSE;
}
@@ -2912,7 +2983,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -2923,7 +2994,7 @@
table, SAFE_SQL_NTS(table) );
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT,
"SQLPrimaryKeys");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLPrimaryKeys");
efree(result);
RETURN_FALSE;
}
@@ -2994,7 +3065,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -3006,7 +3077,7 @@
col, SAFE_SQL_NTS(col) );
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT,
"SQLProcedureColumns");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLProcedureColumns");
efree(result);
RETURN_FALSE;
}
@@ -3076,7 +3147,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -3087,7 +3158,7 @@
proc, SAFE_SQL_NTS(proc) );
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT,
"SQLProcedures");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLProcedures");
efree(result);
RETURN_FALSE;
}
@@ -3162,7 +3233,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -3176,7 +3247,7 @@
nullable);
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT,
"SQLSpecialColumns");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLSpecialColumns");
efree(result);
RETURN_FALSE;
}
@@ -3247,7 +3318,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -3260,7 +3331,7 @@
reserved);
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT,
"SQLStatistics");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLStatistics");
efree(result);
RETURN_FALSE;
}
@@ -3325,7 +3396,7 @@
}
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT, "SQLAllocStmt");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLAllocStmt");
efree(result);
RETURN_FALSE;
}
@@ -3336,7 +3407,7 @@
table, SAFE_SQL_NTS(table));
if (rc == SQL_ERROR) {
- odbc_sql_error(conn->henv, conn->hdbc, SQL_NULL_HSTMT,
"SQLTablePrivileges");
+ odbc_sql_error(conn, SQL_NULL_HSTMT, "SQLTablePrivileges");
efree(result);
RETURN_FALSE;
}
Index: php4/ext/odbc/php_odbc.h
diff -u php4/ext/odbc/php_odbc.h:1.31 php4/ext/odbc/php_odbc.h:1.32
--- php4/ext/odbc/php_odbc.h:1.31 Thu Dec 28 14:01:50 2000
+++ php4/ext/odbc/php_odbc.h Sun Jan 14 17:11:06 2001
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_odbc.h,v 1.31 2000/12/28 22:01:50 kalowsky Exp $ */
+/* $Id: php_odbc.h,v 1.32 2001/01/15 01:11:06 ssb Exp $ */
#ifndef PHP_ODBC_H
#define PHP_ODBC_H
@@ -182,6 +182,8 @@
extern PHP_RSHUTDOWN_FUNCTION(odbc);
PHP_MINFO_FUNCTION(odbc);
+PHP_FUNCTION(odbc_error);
+PHP_FUNCTION(odbc_errormsg);
PHP_FUNCTION(odbc_setoption);
PHP_FUNCTION(odbc_autocommit);
PHP_FUNCTION(odbc_close);
@@ -229,17 +231,25 @@
PHP_FUNCTION(odbc_specialcolumns);
PHP_FUNCTION(odbc_statistics);
-typedef struct odbc_connection {
#if defined( HAVE_IBMDB2 ) || defined( HAVE_UNIXODBC )
- SQLHANDLE henv;
- SQLHANDLE hdbc;
+#define ODBC_SQL_ENV_T SQLHANDLE
+#define ODBC_SQL_CONN_T SQLHANDLE
+#define ODBC_SQL_STMT_T SQLHANDLE
#elif defined( HAVE_SOLID_35 ) || defined( HAVE_SAPDB )
- SQLHENV henv;
- SQLHDBC hdbc;
+#define ODBC_SQL_ENV_T SQLHENV
+#define ODBC_SQL_CONN_T SQLHDBC
+#define ODBC_SQL_STMT_T SQLHSTMT
#else
- HENV henv;
- HDBC hdbc;
+#define ODBC_SQL_ENV_T HENV
+#define ODBC_SQL_CONN_T HDBC
+#define ODBC_SQL_STMT_T HSTMT
#endif
+
+typedef struct odbc_connection {
+ ODBC_SQL_ENV_T henv;
+ ODBC_SQL_CONN_T hdbc;
+ char laststate[6];
+ char lasterrormsg[SQL_MAX_MESSAGE_LENGTH];
int id;
int persistent;
} odbc_connection;
@@ -252,13 +262,7 @@
} odbc_result_value;
typedef struct odbc_result {
-#if defined( HAVE_IBMDB2 ) || defined( HAVE_UNIXODBC )
- SQLHANDLE stmt;
-#elif defined( HAVE_SOLID_35 ) || defined( HAVE_SAPDB )
- SQLHSTMT stmt;
-#else
- HSTMT stmt;
-#endif
+ ODBC_SQL_STMT_T stmt;
int id;
odbc_result_value *values;
SWORD numcols;
@@ -285,6 +289,8 @@
int defConn;
long defaultlrl;
long defaultbinmode;
+ char laststate[6];
+ char lasterrormsg[SQL_MAX_MESSAGE_LENGTH];
HashTable *resource_list;
HashTable *resource_plist;
} php_odbc_globals;
@@ -297,13 +303,7 @@
void odbc_del_conn(HashTable *list, int ind);
int odbc_bindcols(odbc_result *result);
-#if defined( HAVE_IBMDB2 ) || defined( HAVE_UNIXODBC )
-#define ODBC_SQL_ERROR_PARAMS SQLHANDLE henv, SQLHANDLE conn, SQLHANDLE stmt, char
*func
-#elif defined( HAVE_SOLID_35 ) || defined( HAVE_SAPDB )
-#define ODBC_SQL_ERROR_PARAMS SQLHENV henv, SQLHDBC conn, SQLHSTMT stmt, char *func
-#else
-#define ODBC_SQL_ERROR_PARAMS HENV henv, HDBC conn, HSTMT stmt, char *func
-#endif
+#define ODBC_SQL_ERROR_PARAMS odbc_connection *conn_resource, ODBC_SQL_STMT_T stmt,
+char *func
void odbc_sql_error(ODBC_SQL_ERROR_PARAMS);
--
PHP CVS 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]