cvs: php4 /ext/dbx dbx.c dbx.h dbx_fbsql.c dbx_fbsql.h dbx_mssql.c dbx_mssql.h dbx_mysql.c dbx_mysql.h dbx_oci8.c dbx_oci8.h dbx_odbc.c dbx_odbc.h
dbx_pgsql.c dbx_pgsql.h dbx_sybasect.c dbx_sybasect.h php_dbx.h
| From: | Marc Boeren | Date: | Tue, 29 Oct 2002 14:08:40 +0000 |
| Subject: | cvs: php4 /ext/dbx dbx.c dbx.h dbx_fbsql.c dbx_fbsql.h dbx_mssql.c dbx_mssql.h dbx_mysql.c dbx_mysql.h dbx_oci8.c dbx_oci8.h dbx_odbc.c dbx_odbc.h dbx_pgsql.c dbx_pgsql.h dbx_sybasect.c dbx_sybasect.h php_dbx.h |
||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-15585@lists.php.net to get a copy of this message | ||
mboeren Tue Oct 29 09:08:40 2002 EDT
Modified files:
/php4/ext/dbx dbx.c dbx.h dbx_fbsql.c dbx_fbsql.h dbx_mssql.c
dbx_mssql.h dbx_mysql.c dbx_mysql.h dbx_oci8.c
dbx_oci8.h dbx_odbc.c dbx_odbc.h dbx_pgsql.c
dbx_pgsql.h dbx_sybasect.c dbx_sybasect.h php_dbx.h
Log:
Added dbx_escape_string function
# tested on odbc, oci8 and mysql
@Added dbx_escape_string function to dbx module. (Marc)
Index: php4/ext/dbx/dbx.c diff -u php4/ext/dbx/dbx.c:1.40 php4/ext/dbx/dbx.c:1.41 --- php4/ext/dbx/dbx.c:1.40 Mon Oct 28 04:41:15 2002 +++ php4/ext/dbx/dbx.c Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx.c,v 1.40 2002/10/28 09:41:15 mboeren Exp $ */ +/* $Id: dbx.c,v 1.41 2002/10/29 14:08:39 mboeren Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -30,7 +30,6 @@ #include "php_ini.h" #include "php_dbx.h" #include "ext/standard/info.h" -#include "ext/standard/php_string.h" /* defines for supported databases */ #define DBX_UNKNOWN 0 @@ -137,6 +136,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int switch_dbx_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns string */ +int switch_dbx_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); + /* returns escaped string */ /* Every user visible function must have an entry in dbx_functions[]. */ @@ -145,6 +146,7 @@ ZEND_FE(dbx_close, NULL) ZEND_FE(dbx_query, NULL) ZEND_FE(dbx_error, NULL) + ZEND_FE(dbx_escape_string, NULL) ZEND_FE(dbx_sort, NULL) ZEND_FE(dbx_compare, NULL) @@ -168,15 +170,15 @@ #ifdef COMPILE_DL_DBX ZEND_GET_MODULE(dbx) #endif - -ZEND_INI_BEGIN() - ZEND_INI_ENTRY("dbx.colnames_case", "unchanged", ZEND_INI_SYSTEM, NULL) -ZEND_INI_END() + +ZEND_INI_BEGIN() + ZEND_INI_ENTRY("dbx.colnames_case", "unchanged", ZEND_INI_SYSTEM, NULL) +ZEND_INI_END() ZEND_MINIT_FUNCTION(dbx) { - REGISTER_INI_ENTRIES(); - + REGISTER_INI_ENTRIES(); + REGISTER_LONG_CONSTANT("DBX_MYSQL", DBX_MYSQL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_ODBC", DBX_ODBC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_PGSQL", DBX_PGSQL, CONST_CS | CONST_PERSISTENT); @@ -190,10 +192,10 @@ REGISTER_LONG_CONSTANT("DBX_RESULT_INFO", DBX_RESULT_INFO, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_RESULT_INDEX", DBX_RESULT_INDEX, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_RESULT_ASSOC", DBX_RESULT_ASSOC, CONST_CS | CONST_PERSISTENT); - - REGISTER_LONG_CONSTANT("DBX_COLNAMES_UNCHANGED", DBX_COLNAMES_UNCHANGED, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DBX_COLNAMES_UPPERCASE", DBX_COLNAMES_UPPERCASE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DBX_COLNAMES_LOWERCASE", DBX_COLNAMES_LOWERCASE, CONST_CS | CONST_PERSISTENT); + + REGISTER_LONG_CONSTANT("DBX_COLNAMES_UNCHANGED", DBX_COLNAMES_UNCHANGED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("DBX_COLNAMES_UPPERCASE", DBX_COLNAMES_UPPERCASE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("DBX_COLNAMES_LOWERCASE", DBX_COLNAMES_LOWERCASE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_CMP_NATIVE", DBX_CMP_NATIVE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_CMP_TEXT", DBX_CMP_TEXT, CONST_CS | CONST_PERSISTENT); @@ -206,7 +208,7 @@ ZEND_MSHUTDOWN_FUNCTION(dbx) { - UNREGISTER_INI_ENTRIES(); + UNREGISTER_INI_ENTRIES(); return SUCCESS; } @@ -227,7 +229,7 @@ php_info_print_table_row(2, "dbx version", "1.0.0"); php_info_print_table_row(2, "supported databases", "MySQL\nODBC\nPostgreSQL\nMicrosoft SQL Server\nFrontBase\nOracle 8 (oci8)\nSybase-CT"); php_info_print_table_end(); - DISPLAY_INI_ENTRIES(); + DISPLAY_INI_ENTRIES(); } /* @@ -366,20 +368,20 @@ long col_index; long row_count; zval *info; - long query_flags; - long result_flags; + long query_flags; + long result_flags; zval *data; zval **row_ptr; - zval **inforow_ptr; - /* default values for colname-case */ - char * colnames_case = INI_STR("dbx.colnames_case"); - long colcase = DBX_COLNAMES_UNCHANGED; - if (!strcmp(colnames_case, "uppercase")) { - colcase = DBX_COLNAMES_UPPERCASE; - } - if (!strcmp(colnames_case, "lowercase")) { - colcase = DBX_COLNAMES_LOWERCASE; - } + zval **inforow_ptr; + /* default values for colname-case */ + char * colnames_case = INI_STR("dbx.colnames_case"); + long colcase = DBX_COLNAMES_UNCHANGED; + if (!strcmp(colnames_case, "uppercase")) { + colcase = DBX_COLNAMES_UPPERCASE; + } + if (!strcmp(colnames_case, "lowercase")) { + colcase = DBX_COLNAMES_LOWERCASE; + } if (ZEND_NUM_ARGS()<min_number_of_arguments || ZEND_NUM_ARGS()>number_of_arguments || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), arguments) == FAILURE) { WRONG_PARAM_COUNT; @@ -394,22 +396,22 @@ if (ZEND_NUM_ARGS()>2) { convert_to_long_ex(arguments[2]); query_flags = Z_LVAL_PP(arguments[2]); - /* fieldnames are needed for association! */ - result_flags = (query_flags & DBX_RESULT_INFO) | (query_flags & DBX_RESULT_INDEX) | (query_flags & DBX_RESULT_ASSOC); + /* fieldnames are needed for association! */ + result_flags = (query_flags & DBX_RESULT_INFO) | (query_flags & DBX_RESULT_INDEX) | (query_flags & DBX_RESULT_ASSOC); if (result_flags & DBX_RESULT_ASSOC) { result_flags |= DBX_RESULT_INFO; - } - if (!result_flags) result_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC; + } + if (!result_flags) result_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC; /* override ini-setting for colcase */ - if (query_flags & DBX_COLNAMES_UNCHANGED) { - colcase = DBX_COLNAMES_UNCHANGED; - } - if (query_flags & DBX_COLNAMES_UPPERCASE) { - colcase = DBX_COLNAMES_UPPERCASE; - } - if (query_flags & DBX_COLNAMES_LOWERCASE) { - colcase = DBX_COLNAMES_LOWERCASE; - } + if (query_flags & DBX_COLNAMES_UNCHANGED) { + colcase = DBX_COLNAMES_UNCHANGED; + } + if (query_flags & DBX_COLNAMES_UPPERCASE) { + colcase = DBX_COLNAMES_UPPERCASE; + } + if (query_flags & DBX_COLNAMES_LOWERCASE) { + colcase = DBX_COLNAMES_LOWERCASE; + } } MAKE_STD_ZVAL(rv_result_handle); ZVAL_LONG(rv_result_handle, 0); @@ -484,14 +486,14 @@ /* get name */ MAKE_STD_ZVAL(rv_column_name); ZVAL_LONG(rv_column_name, 0); - result = switch_dbx_getcolumnname(&rv_column_name, &rv_result_handle, col_index, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module); - /* modify case if requested */ + result = switch_dbx_getcolumnname(&rv_column_name, &rv_result_handle, col_index, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module); + /* modify case if requested */ if (colcase==DBX_COLNAMES_UPPERCASE) { - php_strtoupper(Z_STRVAL_P(rv_column_name), Z_STRLEN_P(rv_column_name)); - } - if (colcase==DBX_COLNAMES_LOWERCASE) { - php_strtolower(Z_STRVAL_P(rv_column_name), Z_STRLEN_P(rv_column_name)); - } + php_strtoupper(Z_STRVAL_P(rv_column_name), Z_STRLEN_P(rv_column_name)); + } + if (colcase==DBX_COLNAMES_LOWERCASE) { + php_strtolower(Z_STRVAL_P(rv_column_name), Z_STRLEN_P(rv_column_name)); + } if (result) { zend_hash_index_update(Z_ARRVAL_P(info_row_name), col_index, (void *)&(rv_column_name), sizeof(zval *), NULL); } else { @@ -574,6 +576,40 @@ } /* }}} */ +/* {{{ proto string dbx_esc(dbx_link_object dbx_link, string sz) + Returns escaped string or NULL on error +*/ +ZEND_FUNCTION(dbx_escape_string) +{ + int number_of_arguments=2; + zval **arguments[2]; + + int result; + zval **dbx_handle; + zval **dbx_module; + zval **dbx_database; + zval *rv; + + if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) { + WRONG_PARAM_COUNT; + } + if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database)) { + zend_error(E_WARNING, "dbx_esc: not a valid dbx_handle-object..."); + RETURN_NULL(); + } + convert_to_string_ex(arguments[1]); + + MAKE_STD_ZVAL(rv); + ZVAL_LONG(rv, 0); + result = switch_dbx_esc(&rv, dbx_handle, arguments[1], INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module); + if (!result) { /* this will probably never happen */ + FREE_ZVAL(rv); + RETURN_NULL(); + } + MOVE_RETURNED_TO_RV(&return_value, rv); +} +/* }}} */ + /* * dbx functions that are database independent... like sorting result_objects! */ @@ -847,6 +883,22 @@ case DBX_SYBASECT: return dbx_sybasect_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_error: not supported in this module"); + return 0; +} + +int switch_dbx_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) +{ + /* returns escaped string */ + switch (Z_LVAL_PP(dbx_module)) { + case DBX_MYSQL: return dbx_mysql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_ODBC: return dbx_odbc_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_PGSQL: return dbx_pgsql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_MSSQL: return dbx_mssql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_FBSQL: return dbx_fbsql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_OCI8: return dbx_oci8_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_SYBASECT: return dbx_sybasect_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + } + zend_error(E_WARNING, "dbx_esc: not supported in this module"); return 0; } Index: php4/ext/dbx/dbx.h diff -u php4/ext/dbx/dbx.h:1.10 php4/ext/dbx/dbx.h:1.11 --- php4/ext/dbx/dbx.h:1.10 Mon Oct 28 04:41:15 2002 +++ php4/ext/dbx/dbx.h Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx.h,v 1.10 2002/10/28 09:41:15 mboeren Exp $ */ +/* $Id: dbx.h,v 1.11 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_H #define ZEND_DBX_H @@ -30,15 +30,16 @@ #endif #include "php.h" +#include "ext/standard/php_string.h" #define DBX_PERSISTENT (1<<0) #define DBX_RESULT_INFO (1<<0) #define DBX_RESULT_INDEX (1<<1) #define DBX_RESULT_ASSOC (1<<2) -#define DBX_COLNAMES_UNCHANGED (1<<3) -#define DBX_COLNAMES_UPPERCASE (1<<4) -#define DBX_COLNAMES_LOWERCASE (1<<5) +#define DBX_COLNAMES_UNCHANGED (1<<3) +#define DBX_COLNAMES_UPPERCASE (1<<4) +#define DBX_COLNAMES_LOWERCASE (1<<5) #define DBX_CMP_NATIVE (1<<0) #define DBX_CMP_TEXT (1<<1) Index: php4/ext/dbx/dbx_fbsql.c diff -u php4/ext/dbx/dbx_fbsql.c:1.6 php4/ext/dbx/dbx_fbsql.c:1.7 --- php4/ext/dbx/dbx_fbsql.c:1.6 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_fbsql.c Tue Oct 29 09:08:39 2002 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_fbsql.c,v 1.6 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_fbsql.c,v 1.7 2002/10/29 14:08:39 mboeren Exp $ */ #include "dbx.h" #include "dbx_fbsql.h" @@ -246,6 +246,28 @@ return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_fbsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace \ with \\ */ + /* ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } Index: php4/ext/dbx/dbx_fbsql.h diff -u php4/ext/dbx/dbx_fbsql.h:1.5 php4/ext/dbx/dbx_fbsql.h:1.6 --- php4/ext/dbx/dbx_fbsql.h:1.5 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_fbsql.h Tue Oct 29 09:08:39 2002 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_fbsql.h,v 1.5 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_fbsql.h,v 1.6 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_FBSQL_H #define ZEND_DBX_FBSQL_H @@ -50,6 +50,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_fbsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_fbsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_FBSQL_H */ Index: php4/ext/dbx/dbx_mssql.c diff -u php4/ext/dbx/dbx_mssql.c:1.9 php4/ext/dbx/dbx_mssql.c:1.10 --- php4/ext/dbx/dbx_mssql.c:1.9 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_mssql.c Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_mssql.c,v 1.9 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_mssql.c,v 1.10 2002/10/29 14:08:39 mboeren Exp $ */ #include "dbx.h" #include "dbx_mssql.h" @@ -246,6 +246,27 @@ return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_mssql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } Index: php4/ext/dbx/dbx_mssql.h diff -u php4/ext/dbx/dbx_mssql.h:1.7 php4/ext/dbx/dbx_mssql.h:1.8 --- php4/ext/dbx/dbx_mssql.h:1.7 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_mssql.h Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_mssql.h,v 1.7 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_mssql.h,v 1.8 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_MSSQL_H #define ZEND_DBX_MSSQL_H @@ -49,6 +49,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_mssql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_mssql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_MSSQL_H */ Index: php4/ext/dbx/dbx_mysql.c diff -u php4/ext/dbx/dbx_mysql.c:1.14 php4/ext/dbx/dbx_mysql.c:1.15 --- php4/ext/dbx/dbx_mysql.c:1.14 Wed Jan 16 11:28:50 2002 +++ php4/ext/dbx/dbx_mysql.c Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_mysql.c,v 1.14 2002/01/16 16:28:50 mboeren Exp $ */ +/* $Id: dbx_mysql.c,v 1.15 2002/10/29 14:08:39 mboeren Exp $ */ #include "dbx.h" #include "dbx_mysql.h" @@ -250,6 +250,43 @@ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; + } + MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_mysql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + int number_of_arguments=2; + zval **arguments[2]; + zval *returned_zval=NULL; + char * str; + int len; + char * tmpstr; + int tmplen; + + arguments[0]=string; + arguments[1]=dbx_handle; + dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_real_escape_string", &returned_zval, number_of_arguments, arguments); + if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { + if (returned_zval) zval_ptr_dtor(&returned_zval); + /* mysql_real_escape_string failed, just do my own escaping then */ + /* replace \ with \\ */ + /* ' with '' */ + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "\\", 1, "\\\\", 2, &len); + efree(tmpstr); + tmpstr=str; tmplen=len; + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; Index: php4/ext/dbx/dbx_mysql.h diff -u php4/ext/dbx/dbx_mysql.h:1.11 php4/ext/dbx/dbx_mysql.h:1.12 --- php4/ext/dbx/dbx_mysql.h:1.11 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_mysql.h Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_mysql.h,v 1.11 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_mysql.h,v 1.12 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_MYSQL_H #define ZEND_DBX_MYSQL_H @@ -49,6 +49,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_mysql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_mysql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_MYSQL_H */ Index: php4/ext/dbx/dbx_oci8.c diff -u php4/ext/dbx/dbx_oci8.c:1.9 php4/ext/dbx/dbx_oci8.c:1.10 --- php4/ext/dbx/dbx_oci8.c:1.9 Mon Oct 28 04:41:15 2002 +++ php4/ext/dbx/dbx_oci8.c Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_oci8.c,v 1.9 2002/10/28 09:41:15 mboeren Exp $ */ +/* $Id: dbx_oci8.c,v 1.10 2002/10/29 14:08:39 mboeren Exp $ */ #include "dbx.h" #include "dbx_oci8.h" @@ -264,6 +264,27 @@ } MOVE_RETURNED_TO_RV(rv, returned_message_zval); zval_ptr_dtor(&returned_zval); + return 1; +} + +int dbx_oci8_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } Index: php4/ext/dbx/dbx_oci8.h diff -u php4/ext/dbx/dbx_oci8.h:1.4 php4/ext/dbx/dbx_oci8.h:1.5 --- php4/ext/dbx/dbx_oci8.h:1.4 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_oci8.h Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_oci8.h,v 1.4 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_oci8.h,v 1.5 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_OCI8_H #define ZEND_DBX_OCI8_H @@ -49,6 +49,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_oci8_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_oci8_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_OCI8_H */ Index: php4/ext/dbx/dbx_odbc.c diff -u php4/ext/dbx/dbx_odbc.c:1.16 php4/ext/dbx/dbx_odbc.c:1.17 --- php4/ext/dbx/dbx_odbc.c:1.16 Thu Oct 24 15:07:08 2002 +++ php4/ext/dbx/dbx_odbc.c Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_odbc.c,v 1.16 2002/10/24 19:07:08 helly Exp $ */ +/* $Id: dbx_odbc.c,v 1.17 2002/10/29 14:08:39 mboeren Exp $ */ #include "dbx.h" #include "dbx_odbc.h" @@ -269,6 +269,27 @@ return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_odbc_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } Index: php4/ext/dbx/dbx_odbc.h diff -u php4/ext/dbx/dbx_odbc.h:1.11 php4/ext/dbx/dbx_odbc.h:1.12 --- php4/ext/dbx/dbx_odbc.h:1.11 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_odbc.h Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_odbc.h,v 1.11 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_odbc.h,v 1.12 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_ODBC_H #define ZEND_DBX_ODBC_H @@ -49,6 +49,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_odbc_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_odbc_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_ODBC_H */ Index: php4/ext/dbx/dbx_pgsql.c diff -u php4/ext/dbx/dbx_pgsql.c:1.17 php4/ext/dbx/dbx_pgsql.c:1.18 --- php4/ext/dbx/dbx_pgsql.c:1.17 Wed Feb 13 08:11:36 2002 +++ php4/ext/dbx/dbx_pgsql.c Tue Oct 29 09:08:40 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_pgsql.c,v 1.17 2002/02/13 13:11:36 yohgaki Exp $ */ +/* $Id: dbx_pgsql.c,v 1.18 2002/10/29 14:08:40 mboeren Exp $ */ #include "dbx.h" #include "php_dbx.h" @@ -272,6 +272,30 @@ return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_pgsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace \ with \\ */ + /* ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "\\", 1, "\\\\", 2, &len); + efree(tmpstr); + tmpstr=str; tmplen=len; + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); return 1; } Index: php4/ext/dbx/dbx_pgsql.h diff -u php4/ext/dbx/dbx_pgsql.h:1.10 php4/ext/dbx/dbx_pgsql.h:1.11 --- php4/ext/dbx/dbx_pgsql.h:1.10 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_pgsql.h Tue Oct 29 09:08:40 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_pgsql.h,v 1.10 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_pgsql.h,v 1.11 2002/10/29 14:08:40 mboeren Exp $ */ #ifndef ZEND_DBX_PGSQL_H #define ZEND_DBX_PGSQL_H @@ -45,6 +45,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_pgsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_pgsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_PGSQL_H */ Index: php4/ext/dbx/dbx_sybasect.c diff -u php4/ext/dbx/dbx_sybasect.c:1.3 php4/ext/dbx/dbx_sybasect.c:1.4 --- php4/ext/dbx/dbx_sybasect.c:1.3 Tue Jun 18 03:48:41 2002 +++ php4/ext/dbx/dbx_sybasect.c Tue Oct 29 09:08:40 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_sybasect.c,v 1.3 2002/06/18 07:48:41 mfischer Exp $ */ +/* $Id: dbx_sybasect.c,v 1.4 2002/10/29 14:08:40 mboeren Exp $ */ #include "dbx.h" #include "dbx_sybasect.h" @@ -271,6 +271,27 @@ return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_sybasect_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } Index: php4/ext/dbx/dbx_sybasect.h diff -u php4/ext/dbx/dbx_sybasect.h:1.2 php4/ext/dbx/dbx_sybasect.h:1.3 --- php4/ext/dbx/dbx_sybasect.h:1.2 Mon Feb 18 05:22:09 2002 +++ php4/ext/dbx/dbx_sybasect.h Tue Oct 29 09:08:40 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_sybasect.h,v 1.2 2002/02/18 10:22:09 mboeren Exp $ */ +/* $Id: dbx_sybasect.h,v 1.3 2002/10/29 14:08:40 mboeren Exp $ */ #ifndef ZEND_DBX_SYBASECT_H #define ZEND_DBX_SYBASECT_H @@ -49,6 +49,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_sybasect_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_sybasect_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_SYBASECT_H */ Index: php4/ext/dbx/php_dbx.h diff -u php4/ext/dbx/php_dbx.h:1.12 php4/ext/dbx/php_dbx.h:1.13 --- php4/ext/dbx/php_dbx.h:1.12 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/php_dbx.h Tue Oct 29 09:08:40 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_dbx.h,v 1.12 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: php_dbx.h,v 1.13 2002/10/29 14:08:40 mboeren Exp $ */ #ifndef ZEND_PHP_DBX_H #define ZEND_PHP_DBX_H @@ -49,6 +49,7 @@ ZEND_FUNCTION(dbx_close); ZEND_FUNCTION(dbx_query); ZEND_FUNCTION(dbx_error); +ZEND_FUNCTION(dbx_escape_string); ZEND_FUNCTION(dbx_sort); ZEND_FUNCTION(dbx_compare);
Index: php4/ext/dbx/dbx.c diff -u php4/ext/dbx/dbx.c:1.40 php4/ext/dbx/dbx.c:1.41 --- php4/ext/dbx/dbx.c:1.40 Mon Oct 28 04:41:15 2002 +++ php4/ext/dbx/dbx.c Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx.c,v 1.40 2002/10/28 09:41:15 mboeren Exp $ */ +/* $Id: dbx.c,v 1.41 2002/10/29 14:08:39 mboeren Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -30,7 +30,6 @@ #include "php_ini.h" #include "php_dbx.h" #include "ext/standard/info.h" -#include "ext/standard/php_string.h" /* defines for supported databases */ #define DBX_UNKNOWN 0 @@ -137,6 +136,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int switch_dbx_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); /* returns string */ +int switch_dbx_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module); + /* returns escaped string */ /* Every user visible function must have an entry in dbx_functions[]. */ @@ -145,6 +146,7 @@ ZEND_FE(dbx_close, NULL) ZEND_FE(dbx_query, NULL) ZEND_FE(dbx_error, NULL) + ZEND_FE(dbx_escape_string, NULL) ZEND_FE(dbx_sort, NULL) ZEND_FE(dbx_compare, NULL) @@ -168,15 +170,15 @@ #ifdef COMPILE_DL_DBX ZEND_GET_MODULE(dbx) #endif - -ZEND_INI_BEGIN() - ZEND_INI_ENTRY("dbx.colnames_case", "unchanged", ZEND_INI_SYSTEM, NULL) -ZEND_INI_END() + +ZEND_INI_BEGIN() + ZEND_INI_ENTRY("dbx.colnames_case", "unchanged", ZEND_INI_SYSTEM, NULL) +ZEND_INI_END() ZEND_MINIT_FUNCTION(dbx) { - REGISTER_INI_ENTRIES(); - + REGISTER_INI_ENTRIES(); + REGISTER_LONG_CONSTANT("DBX_MYSQL", DBX_MYSQL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_ODBC", DBX_ODBC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_PGSQL", DBX_PGSQL, CONST_CS | CONST_PERSISTENT); @@ -190,10 +192,10 @@ REGISTER_LONG_CONSTANT("DBX_RESULT_INFO", DBX_RESULT_INFO, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_RESULT_INDEX", DBX_RESULT_INDEX, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_RESULT_ASSOC", DBX_RESULT_ASSOC, CONST_CS | CONST_PERSISTENT); - - REGISTER_LONG_CONSTANT("DBX_COLNAMES_UNCHANGED", DBX_COLNAMES_UNCHANGED, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DBX_COLNAMES_UPPERCASE", DBX_COLNAMES_UPPERCASE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("DBX_COLNAMES_LOWERCASE", DBX_COLNAMES_LOWERCASE, CONST_CS | CONST_PERSISTENT); + + REGISTER_LONG_CONSTANT("DBX_COLNAMES_UNCHANGED", DBX_COLNAMES_UNCHANGED, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("DBX_COLNAMES_UPPERCASE", DBX_COLNAMES_UPPERCASE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("DBX_COLNAMES_LOWERCASE", DBX_COLNAMES_LOWERCASE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_CMP_NATIVE", DBX_CMP_NATIVE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("DBX_CMP_TEXT", DBX_CMP_TEXT, CONST_CS | CONST_PERSISTENT); @@ -206,7 +208,7 @@ ZEND_MSHUTDOWN_FUNCTION(dbx) { - UNREGISTER_INI_ENTRIES(); + UNREGISTER_INI_ENTRIES(); return SUCCESS; } @@ -227,7 +229,7 @@ php_info_print_table_row(2, "dbx version", "1.0.0"); php_info_print_table_row(2, "supported databases", "MySQL\nODBC\nPostgreSQL\nMicrosoft SQL Server\nFrontBase\nOracle 8 (oci8)\nSybase-CT"); php_info_print_table_end(); - DISPLAY_INI_ENTRIES(); + DISPLAY_INI_ENTRIES(); } /* @@ -366,20 +368,20 @@ long col_index; long row_count; zval *info; - long query_flags; - long result_flags; + long query_flags; + long result_flags; zval *data; zval **row_ptr; - zval **inforow_ptr; - /* default values for colname-case */ - char * colnames_case = INI_STR("dbx.colnames_case"); - long colcase = DBX_COLNAMES_UNCHANGED; - if (!strcmp(colnames_case, "uppercase")) { - colcase = DBX_COLNAMES_UPPERCASE; - } - if (!strcmp(colnames_case, "lowercase")) { - colcase = DBX_COLNAMES_LOWERCASE; - } + zval **inforow_ptr; + /* default values for colname-case */ + char * colnames_case = INI_STR("dbx.colnames_case"); + long colcase = DBX_COLNAMES_UNCHANGED; + if (!strcmp(colnames_case, "uppercase")) { + colcase = DBX_COLNAMES_UPPERCASE; + } + if (!strcmp(colnames_case, "lowercase")) { + colcase = DBX_COLNAMES_LOWERCASE; + } if (ZEND_NUM_ARGS()<min_number_of_arguments || ZEND_NUM_ARGS()>number_of_arguments || zend_get_parameters_array_ex(ZEND_NUM_ARGS(), arguments) == FAILURE) { WRONG_PARAM_COUNT; @@ -394,22 +396,22 @@ if (ZEND_NUM_ARGS()>2) { convert_to_long_ex(arguments[2]); query_flags = Z_LVAL_PP(arguments[2]); - /* fieldnames are needed for association! */ - result_flags = (query_flags & DBX_RESULT_INFO) | (query_flags & DBX_RESULT_INDEX) | (query_flags & DBX_RESULT_ASSOC); + /* fieldnames are needed for association! */ + result_flags = (query_flags & DBX_RESULT_INFO) | (query_flags & DBX_RESULT_INDEX) | (query_flags & DBX_RESULT_ASSOC); if (result_flags & DBX_RESULT_ASSOC) { result_flags |= DBX_RESULT_INFO; - } - if (!result_flags) result_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC; + } + if (!result_flags) result_flags = DBX_RESULT_INFO | DBX_RESULT_INDEX | DBX_RESULT_ASSOC; /* override ini-setting for colcase */ - if (query_flags & DBX_COLNAMES_UNCHANGED) { - colcase = DBX_COLNAMES_UNCHANGED; - } - if (query_flags & DBX_COLNAMES_UPPERCASE) { - colcase = DBX_COLNAMES_UPPERCASE; - } - if (query_flags & DBX_COLNAMES_LOWERCASE) { - colcase = DBX_COLNAMES_LOWERCASE; - } + if (query_flags & DBX_COLNAMES_UNCHANGED) { + colcase = DBX_COLNAMES_UNCHANGED; + } + if (query_flags & DBX_COLNAMES_UPPERCASE) { + colcase = DBX_COLNAMES_UPPERCASE; + } + if (query_flags & DBX_COLNAMES_LOWERCASE) { + colcase = DBX_COLNAMES_LOWERCASE; + } } MAKE_STD_ZVAL(rv_result_handle); ZVAL_LONG(rv_result_handle, 0); @@ -484,14 +486,14 @@ /* get name */ MAKE_STD_ZVAL(rv_column_name); ZVAL_LONG(rv_column_name, 0); - result = switch_dbx_getcolumnname(&rv_column_name, &rv_result_handle, col_index, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module); - /* modify case if requested */ + result = switch_dbx_getcolumnname(&rv_column_name, &rv_result_handle, col_index, INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module); + /* modify case if requested */ if (colcase==DBX_COLNAMES_UPPERCASE) { - php_strtoupper(Z_STRVAL_P(rv_column_name), Z_STRLEN_P(rv_column_name)); - } - if (colcase==DBX_COLNAMES_LOWERCASE) { - php_strtolower(Z_STRVAL_P(rv_column_name), Z_STRLEN_P(rv_column_name)); - } + php_strtoupper(Z_STRVAL_P(rv_column_name), Z_STRLEN_P(rv_column_name)); + } + if (colcase==DBX_COLNAMES_LOWERCASE) { + php_strtolower(Z_STRVAL_P(rv_column_name), Z_STRLEN_P(rv_column_name)); + } if (result) { zend_hash_index_update(Z_ARRVAL_P(info_row_name), col_index, (void *)&(rv_column_name), sizeof(zval *), NULL); } else { @@ -574,6 +576,40 @@ } /* }}} */ +/* {{{ proto string dbx_esc(dbx_link_object dbx_link, string sz) + Returns escaped string or NULL on error +*/ +ZEND_FUNCTION(dbx_escape_string) +{ + int number_of_arguments=2; + zval **arguments[2]; + + int result; + zval **dbx_handle; + zval **dbx_module; + zval **dbx_database; + zval *rv; + + if (ZEND_NUM_ARGS() !=number_of_arguments || zend_get_parameters_array_ex(number_of_arguments, arguments) == FAILURE) { + WRONG_PARAM_COUNT; + } + if (!split_dbx_handle_object(arguments[0], &dbx_handle, &dbx_module, &dbx_database)) { + zend_error(E_WARNING, "dbx_esc: not a valid dbx_handle-object..."); + RETURN_NULL(); + } + convert_to_string_ex(arguments[1]); + + MAKE_STD_ZVAL(rv); + ZVAL_LONG(rv, 0); + result = switch_dbx_esc(&rv, dbx_handle, arguments[1], INTERNAL_FUNCTION_PARAM_PASSTHRU, dbx_module); + if (!result) { /* this will probably never happen */ + FREE_ZVAL(rv); + RETURN_NULL(); + } + MOVE_RETURNED_TO_RV(&return_value, rv); +} +/* }}} */ + /* * dbx functions that are database independent... like sorting result_objects! */ @@ -847,6 +883,22 @@ case DBX_SYBASECT: return dbx_sybasect_error(rv, dbx_handle, INTERNAL_FUNCTION_PARAM_PASSTHRU); } zend_error(E_WARNING, "dbx_error: not supported in this module"); + return 0; +} + +int switch_dbx_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS, zval **dbx_module) +{ + /* returns escaped string */ + switch (Z_LVAL_PP(dbx_module)) { + case DBX_MYSQL: return dbx_mysql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_ODBC: return dbx_odbc_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_PGSQL: return dbx_pgsql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_MSSQL: return dbx_mssql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_FBSQL: return dbx_fbsql_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_OCI8: return dbx_oci8_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + case DBX_SYBASECT: return dbx_sybasect_esc(rv, dbx_handle, string, INTERNAL_FUNCTION_PARAM_PASSTHRU); + } + zend_error(E_WARNING, "dbx_esc: not supported in this module"); return 0; } Index: php4/ext/dbx/dbx.h diff -u php4/ext/dbx/dbx.h:1.10 php4/ext/dbx/dbx.h:1.11 --- php4/ext/dbx/dbx.h:1.10 Mon Oct 28 04:41:15 2002 +++ php4/ext/dbx/dbx.h Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx.h,v 1.10 2002/10/28 09:41:15 mboeren Exp $ */ +/* $Id: dbx.h,v 1.11 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_H #define ZEND_DBX_H @@ -30,15 +30,16 @@ #endif #include "php.h" +#include "ext/standard/php_string.h" #define DBX_PERSISTENT (1<<0) #define DBX_RESULT_INFO (1<<0) #define DBX_RESULT_INDEX (1<<1) #define DBX_RESULT_ASSOC (1<<2) -#define DBX_COLNAMES_UNCHANGED (1<<3) -#define DBX_COLNAMES_UPPERCASE (1<<4) -#define DBX_COLNAMES_LOWERCASE (1<<5) +#define DBX_COLNAMES_UNCHANGED (1<<3) +#define DBX_COLNAMES_UPPERCASE (1<<4) +#define DBX_COLNAMES_LOWERCASE (1<<5) #define DBX_CMP_NATIVE (1<<0) #define DBX_CMP_TEXT (1<<1) Index: php4/ext/dbx/dbx_fbsql.c diff -u php4/ext/dbx/dbx_fbsql.c:1.6 php4/ext/dbx/dbx_fbsql.c:1.7 --- php4/ext/dbx/dbx_fbsql.c:1.6 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_fbsql.c Tue Oct 29 09:08:39 2002 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_fbsql.c,v 1.6 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_fbsql.c,v 1.7 2002/10/29 14:08:39 mboeren Exp $ */ #include "dbx.h" #include "dbx_fbsql.h" @@ -246,6 +246,28 @@ return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_fbsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace \ with \\ */ + /* ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } Index: php4/ext/dbx/dbx_fbsql.h diff -u php4/ext/dbx/dbx_fbsql.h:1.5 php4/ext/dbx/dbx_fbsql.h:1.6 --- php4/ext/dbx/dbx_fbsql.h:1.5 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_fbsql.h Tue Oct 29 09:08:39 2002 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_fbsql.h,v 1.5 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_fbsql.h,v 1.6 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_FBSQL_H #define ZEND_DBX_FBSQL_H @@ -50,6 +50,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_fbsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_fbsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_FBSQL_H */ Index: php4/ext/dbx/dbx_mssql.c diff -u php4/ext/dbx/dbx_mssql.c:1.9 php4/ext/dbx/dbx_mssql.c:1.10 --- php4/ext/dbx/dbx_mssql.c:1.9 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_mssql.c Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_mssql.c,v 1.9 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_mssql.c,v 1.10 2002/10/29 14:08:39 mboeren Exp $ */ #include "dbx.h" #include "dbx_mssql.h" @@ -246,6 +246,27 @@ return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_mssql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } Index: php4/ext/dbx/dbx_mssql.h diff -u php4/ext/dbx/dbx_mssql.h:1.7 php4/ext/dbx/dbx_mssql.h:1.8 --- php4/ext/dbx/dbx_mssql.h:1.7 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_mssql.h Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_mssql.h,v 1.7 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_mssql.h,v 1.8 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_MSSQL_H #define ZEND_DBX_MSSQL_H @@ -49,6 +49,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_mssql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_mssql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_MSSQL_H */ Index: php4/ext/dbx/dbx_mysql.c diff -u php4/ext/dbx/dbx_mysql.c:1.14 php4/ext/dbx/dbx_mysql.c:1.15 --- php4/ext/dbx/dbx_mysql.c:1.14 Wed Jan 16 11:28:50 2002 +++ php4/ext/dbx/dbx_mysql.c Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_mysql.c,v 1.14 2002/01/16 16:28:50 mboeren Exp $ */ +/* $Id: dbx_mysql.c,v 1.15 2002/10/29 14:08:39 mboeren Exp $ */ #include "dbx.h" #include "dbx_mysql.h" @@ -250,6 +250,43 @@ if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { if (returned_zval) zval_ptr_dtor(&returned_zval); return 0; + } + MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_mysql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + int number_of_arguments=2; + zval **arguments[2]; + zval *returned_zval=NULL; + char * str; + int len; + char * tmpstr; + int tmplen; + + arguments[0]=string; + arguments[1]=dbx_handle; + dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "mysql_real_escape_string", &returned_zval, number_of_arguments, arguments); + if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) { + if (returned_zval) zval_ptr_dtor(&returned_zval); + /* mysql_real_escape_string failed, just do my own escaping then */ + /* replace \ with \\ */ + /* ' with '' */ + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "\\", 1, "\\\\", 2, &len); + efree(tmpstr); + tmpstr=str; tmplen=len; + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } MOVE_RETURNED_TO_RV(rv, returned_zval); return 1; Index: php4/ext/dbx/dbx_mysql.h diff -u php4/ext/dbx/dbx_mysql.h:1.11 php4/ext/dbx/dbx_mysql.h:1.12 --- php4/ext/dbx/dbx_mysql.h:1.11 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_mysql.h Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_mysql.h,v 1.11 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_mysql.h,v 1.12 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_MYSQL_H #define ZEND_DBX_MYSQL_H @@ -49,6 +49,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_mysql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_mysql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_MYSQL_H */ Index: php4/ext/dbx/dbx_oci8.c diff -u php4/ext/dbx/dbx_oci8.c:1.9 php4/ext/dbx/dbx_oci8.c:1.10 --- php4/ext/dbx/dbx_oci8.c:1.9 Mon Oct 28 04:41:15 2002 +++ php4/ext/dbx/dbx_oci8.c Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_oci8.c,v 1.9 2002/10/28 09:41:15 mboeren Exp $ */ +/* $Id: dbx_oci8.c,v 1.10 2002/10/29 14:08:39 mboeren Exp $ */ #include "dbx.h" #include "dbx_oci8.h" @@ -264,6 +264,27 @@ } MOVE_RETURNED_TO_RV(rv, returned_message_zval); zval_ptr_dtor(&returned_zval); + return 1; +} + +int dbx_oci8_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } Index: php4/ext/dbx/dbx_oci8.h diff -u php4/ext/dbx/dbx_oci8.h:1.4 php4/ext/dbx/dbx_oci8.h:1.5 --- php4/ext/dbx/dbx_oci8.h:1.4 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_oci8.h Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_oci8.h,v 1.4 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_oci8.h,v 1.5 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_OCI8_H #define ZEND_DBX_OCI8_H @@ -49,6 +49,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_oci8_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_oci8_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_OCI8_H */ Index: php4/ext/dbx/dbx_odbc.c diff -u php4/ext/dbx/dbx_odbc.c:1.16 php4/ext/dbx/dbx_odbc.c:1.17 --- php4/ext/dbx/dbx_odbc.c:1.16 Thu Oct 24 15:07:08 2002 +++ php4/ext/dbx/dbx_odbc.c Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_odbc.c,v 1.16 2002/10/24 19:07:08 helly Exp $ */ +/* $Id: dbx_odbc.c,v 1.17 2002/10/29 14:08:39 mboeren Exp $ */ #include "dbx.h" #include "dbx_odbc.h" @@ -269,6 +269,27 @@ return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_odbc_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } Index: php4/ext/dbx/dbx_odbc.h diff -u php4/ext/dbx/dbx_odbc.h:1.11 php4/ext/dbx/dbx_odbc.h:1.12 --- php4/ext/dbx/dbx_odbc.h:1.11 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_odbc.h Tue Oct 29 09:08:39 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_odbc.h,v 1.11 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_odbc.h,v 1.12 2002/10/29 14:08:39 mboeren Exp $ */ #ifndef ZEND_DBX_ODBC_H #define ZEND_DBX_ODBC_H @@ -49,6 +49,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_odbc_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_odbc_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_ODBC_H */ Index: php4/ext/dbx/dbx_pgsql.c diff -u php4/ext/dbx/dbx_pgsql.c:1.17 php4/ext/dbx/dbx_pgsql.c:1.18 --- php4/ext/dbx/dbx_pgsql.c:1.17 Wed Feb 13 08:11:36 2002 +++ php4/ext/dbx/dbx_pgsql.c Tue Oct 29 09:08:40 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_pgsql.c,v 1.17 2002/02/13 13:11:36 yohgaki Exp $ */ +/* $Id: dbx_pgsql.c,v 1.18 2002/10/29 14:08:40 mboeren Exp $ */ #include "dbx.h" #include "php_dbx.h" @@ -272,6 +272,30 @@ return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_pgsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace \ with \\ */ + /* ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "\\", 1, "\\\\", 2, &len); + efree(tmpstr); + tmpstr=str; tmplen=len; + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); return 1; } Index: php4/ext/dbx/dbx_pgsql.h diff -u php4/ext/dbx/dbx_pgsql.h:1.10 php4/ext/dbx/dbx_pgsql.h:1.11 --- php4/ext/dbx/dbx_pgsql.h:1.10 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/dbx_pgsql.h Tue Oct 29 09:08:40 2002 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_pgsql.h,v 1.10 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: dbx_pgsql.h,v 1.11 2002/10/29 14:08:40 mboeren Exp $ */ #ifndef ZEND_DBX_PGSQL_H #define ZEND_DBX_PGSQL_H @@ -45,6 +45,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_pgsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_pgsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_PGSQL_H */ Index: php4/ext/dbx/dbx_sybasect.c diff -u php4/ext/dbx/dbx_sybasect.c:1.3 php4/ext/dbx/dbx_sybasect.c:1.4 --- php4/ext/dbx/dbx_sybasect.c:1.3 Tue Jun 18 03:48:41 2002 +++ php4/ext/dbx/dbx_sybasect.c Tue Oct 29 09:08:40 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_sybasect.c,v 1.3 2002/06/18 07:48:41 mfischer Exp $ */ +/* $Id: dbx_sybasect.c,v 1.4 2002/10/29 14:08:40 mboeren Exp $ */ #include "dbx.h" #include "dbx_sybasect.h" @@ -271,6 +271,27 @@ return 0; } MOVE_RETURNED_TO_RV(rv, returned_zval); + return 1; +} + +int dbx_sybasect_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS) +{ + /* returns escaped string */ + /* replace ' with '' */ + char * str; + int len; + char * tmpstr; + int tmplen; + + tmpstr = estrdup(Z_STRVAL_PP(string)); + tmplen = Z_STRLEN_PP(string); + /* php_str_to_str uses a smart_str that allocates memory */ + /* this memory must be freed or passed on to rv */ + str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len); + efree(tmpstr); + + ZVAL_STRINGL(*rv, str, len, 0); + return 1; } Index: php4/ext/dbx/dbx_sybasect.h diff -u php4/ext/dbx/dbx_sybasect.h:1.2 php4/ext/dbx/dbx_sybasect.h:1.3 --- php4/ext/dbx/dbx_sybasect.h:1.2 Mon Feb 18 05:22:09 2002 +++ php4/ext/dbx/dbx_sybasect.h Tue Oct 29 09:08:40 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dbx_sybasect.h,v 1.2 2002/02/18 10:22:09 mboeren Exp $ */ +/* $Id: dbx_sybasect.h,v 1.3 2002/10/29 14:08:40 mboeren Exp $ */ #ifndef ZEND_DBX_SYBASECT_H #define ZEND_DBX_SYBASECT_H @@ -49,6 +49,8 @@ /* returns array[0..columncount-1] as strings on success or 0 as long on failure */ int dbx_sybasect_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS); /* returns string */ +int dbx_sybasect_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS); + /* returns escaped string */ #endif /* ZEND_DBX_SYBASECT_H */ Index: php4/ext/dbx/php_dbx.h diff -u php4/ext/dbx/php_dbx.h:1.12 php4/ext/dbx/php_dbx.h:1.13 --- php4/ext/dbx/php_dbx.h:1.12 Tue Dec 11 10:29:05 2001 +++ php4/ext/dbx/php_dbx.h Tue Oct 29 09:08:40 2002 @@ -20,7 +20,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_dbx.h,v 1.12 2001/12/11 15:29:05 sebastian Exp $ */ +/* $Id: php_dbx.h,v 1.13 2002/10/29 14:08:40 mboeren Exp $ */ #ifndef ZEND_PHP_DBX_H #define ZEND_PHP_DBX_H @@ -49,6 +49,7 @@ ZEND_FUNCTION(dbx_close); ZEND_FUNCTION(dbx_query); ZEND_FUNCTION(dbx_error); +ZEND_FUNCTION(dbx_escape_string); ZEND_FUNCTION(dbx_sort); ZEND_FUNCTION(dbx_compare);