2
+----------------------------------------------------------------------+
4
+----------------------------------------------------------------------+
5
| Copyright (c) 1997-2004 The PHP Group |
6
+----------------------------------------------------------------------+
7
| dbx module version 1.0 |
8
+----------------------------------------------------------------------+
9
| Copyright (c) 2001-2003 Guidance Rotterdam BV |
10
+----------------------------------------------------------------------+
11
| This source file is subject to version 3.0 of the PHP license, |
12
| that is bundled with this package in the file LICENSE, and is |
13
| available through the world-wide-web at the following url: |
14
| http://www.php.net/license/3_0.txt. |
15
| If you did not receive a copy of the PHP license and are unable to |
16
| obtain it through the world-wide-web, please send a note to |
17
| license@php.net so we can mail you a copy immediately. |
18
+----------------------------------------------------------------------+
19
| Author : Marc Boeren <marc@guidance.nl> |
20
| Frank M. Kromann <frank@kromann.info> |
21
+----------------------------------------------------------------------+
24
/* $Id: dbx_fbsql.c,v 1.14 2004/01/08 08:15:09 andi Exp $ */
27
#include "dbx_fbsql.h"
29
#define FBSQL_ASSOC 1<<0
30
#define FBSQL_NUM 1<<1
32
int dbx_fbsql_connect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
34
/* returns connection handle as resource on success or 0 as long on failure */
35
int number_of_arguments=3;
37
zval *returned_zval=NULL;
38
zval *select_db_zval=NULL;
41
arguments[1]=username;
42
arguments[2]=password;
43
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_connect", &returned_zval, number_of_arguments, arguments);
44
if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
45
if (returned_zval) zval_ptr_dtor(&returned_zval);
49
number_of_arguments=2;
51
arguments[1]=&returned_zval;
52
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_select_db", &select_db_zval, number_of_arguments, arguments);
53
if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
54
if (select_db_zval) zval_ptr_dtor(&select_db_zval);
55
/* also close connection */
56
number_of_arguments=1;
57
arguments[0]=&returned_zval;
58
zend_list_addref(Z_LVAL_P(returned_zval));
59
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &select_db_zval, number_of_arguments, arguments);
60
if (select_db_zval) zval_ptr_dtor(&select_db_zval);
61
zval_ptr_dtor(&returned_zval);
64
zval_ptr_dtor(&select_db_zval);
66
MOVE_RETURNED_TO_RV(rv, returned_zval);
70
int dbx_fbsql_pconnect(zval **rv, zval **host, zval **db, zval **username, zval **password, INTERNAL_FUNCTION_PARAMETERS)
72
/* returns persistent connection handle as resource on success or 0 as long on failure */
73
int number_of_arguments=3;
75
zval *returned_zval=NULL;
76
zval *select_db_zval=NULL;
79
arguments[1]=username;
80
arguments[2]=password;
81
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_pconnect", &returned_zval, number_of_arguments, arguments);
82
if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_RESOURCE) {
83
if (returned_zval) zval_ptr_dtor(&returned_zval);
87
number_of_arguments=2;
89
arguments[1]=&returned_zval;
90
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_select_db", &select_db_zval, number_of_arguments, arguments);
91
if (!select_db_zval || (Z_TYPE_P(select_db_zval)==IS_BOOL && Z_LVAL_P(select_db_zval)==0) ) {
92
if (select_db_zval) zval_ptr_dtor(&select_db_zval);
93
/* also close connection */
94
number_of_arguments=1;
95
arguments[0]=&returned_zval;
96
zend_list_addref(Z_LVAL_P(returned_zval));
97
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &select_db_zval, number_of_arguments, arguments);
98
if (select_db_zval) zval_ptr_dtor(&select_db_zval);
99
zval_ptr_dtor(&returned_zval);
102
zval_ptr_dtor(&select_db_zval);
104
MOVE_RETURNED_TO_RV(rv, returned_zval);
108
int dbx_fbsql_close(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
110
/* returns 1 as long on success or 0 as long on failure */
111
int number_of_arguments=1;
113
zval *returned_zval=NULL;
115
arguments[0]=dbx_handle;
116
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_close", &returned_zval, number_of_arguments, arguments);
117
if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_BOOL) {
118
if (returned_zval) zval_ptr_dtor(&returned_zval);
121
MOVE_RETURNED_TO_RV(rv, returned_zval);
125
int dbx_fbsql_query(zval **rv, zval **dbx_handle, zval **db_name, zval **sql_statement, INTERNAL_FUNCTION_PARAMETERS)
127
/* returns 1 as long or a result identifier as resource on success or 0 as long on failure */
128
int number_of_arguments=3;
130
zval *returned_zval=NULL;
132
arguments[0]=db_name;
133
arguments[1]=sql_statement;
134
arguments[2]=dbx_handle;
135
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_db_query", &returned_zval, number_of_arguments, arguments);
136
/* fbsql_query returns a bool for success or failure, or a result_identifier for select statements */
137
if (!returned_zval || (Z_TYPE_P(returned_zval)!=IS_BOOL && Z_TYPE_P(returned_zval)!=IS_RESOURCE)) {
138
if (returned_zval) zval_ptr_dtor(&returned_zval);
141
MOVE_RETURNED_TO_RV(rv, returned_zval);
145
int dbx_fbsql_getcolumncount(zval **rv, zval **result_handle, INTERNAL_FUNCTION_PARAMETERS)
147
/* returns column-count as long on success or 0 as long on failure */
148
int number_of_arguments=1;
150
zval *returned_zval=NULL;
152
arguments[0]=result_handle;
153
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_num_fields", &returned_zval, number_of_arguments, arguments);
154
if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_LONG) {
155
if (returned_zval) zval_ptr_dtor(&returned_zval);
158
MOVE_RETURNED_TO_RV(rv, returned_zval);
162
int dbx_fbsql_getcolumnname(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
164
/* returns column-name as string on success or 0 as long on failure */
165
int number_of_arguments=2;
167
zval *zval_column_index;
168
zval *returned_zval=NULL;
170
MAKE_STD_ZVAL(zval_column_index);
171
ZVAL_LONG(zval_column_index, column_index);
172
arguments[0]=result_handle;
173
arguments[1]=&zval_column_index;
174
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_field_name", &returned_zval, number_of_arguments, arguments);
175
/* fbsql_field_name returns a string */
176
if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
177
if (returned_zval) zval_ptr_dtor(&returned_zval);
178
FREE_ZVAL(zval_column_index);
181
FREE_ZVAL(zval_column_index);
182
MOVE_RETURNED_TO_RV(rv, returned_zval);
186
int dbx_fbsql_getcolumntype(zval **rv, zval **result_handle, long column_index, INTERNAL_FUNCTION_PARAMETERS)
188
/* returns column-type as string on success or 0 as long on failure */
189
int number_of_arguments=2;
191
zval *zval_column_index;
192
zval *returned_zval=NULL;
194
MAKE_STD_ZVAL(zval_column_index);
195
ZVAL_LONG(zval_column_index, column_index);
196
arguments[0]=result_handle;
197
arguments[1]=&zval_column_index;
198
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_field_type", &returned_zval, number_of_arguments, arguments);
199
/* fbsql_field_name returns a string */
200
if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
201
if (returned_zval) zval_ptr_dtor(&returned_zval);
202
FREE_ZVAL(zval_column_index);
205
FREE_ZVAL(zval_column_index);
207
MOVE_RETURNED_TO_RV(rv, returned_zval);
211
int dbx_fbsql_getrow(zval **rv, zval **result_handle, long row_number, INTERNAL_FUNCTION_PARAMETERS)
213
/* returns array[0..columncount-1] as strings on success or 0 as long on failure */
214
int number_of_arguments=2;
216
zval *zval_resulttype=NULL;
217
zval *returned_zval=NULL;
219
MAKE_STD_ZVAL(zval_resulttype);
220
ZVAL_LONG(zval_resulttype, FBSQL_NUM);
221
arguments[0]=result_handle;
222
arguments[1]=&zval_resulttype;
223
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_fetch_array", &returned_zval, number_of_arguments, arguments);
224
if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_ARRAY) {
225
if (returned_zval) zval_ptr_dtor(&returned_zval);
226
FREE_ZVAL(zval_resulttype);
229
FREE_ZVAL(zval_resulttype);
230
MOVE_RETURNED_TO_RV(rv, returned_zval);
234
int dbx_fbsql_error(zval **rv, zval **dbx_handle, INTERNAL_FUNCTION_PARAMETERS)
237
int number_of_arguments=1;
239
zval *returned_zval=NULL;
241
arguments[0]=dbx_handle;
242
if (!dbx_handle) number_of_arguments=0;
243
dbx_call_any_function(INTERNAL_FUNCTION_PARAM_PASSTHRU, "fbsql_error", &returned_zval, number_of_arguments, arguments);
244
if (!returned_zval || Z_TYPE_P(returned_zval)!=IS_STRING) {
245
if (returned_zval) zval_ptr_dtor(&returned_zval);
248
MOVE_RETURNED_TO_RV(rv, returned_zval);
252
int dbx_fbsql_esc(zval **rv, zval **dbx_handle, zval **string, INTERNAL_FUNCTION_PARAMETERS)
254
/* returns escaped string */
255
/* replace \ with \\ */
262
if (Z_STRLEN_PP(string) == 0) {
263
ZVAL_EMPTY_STRING(*rv);
266
tmpstr = estrdup(Z_STRVAL_PP(string));
267
tmplen = Z_STRLEN_PP(string);
268
/* php_str_to_str uses a smart_str that allocates memory */
269
/* this memory must be freed or passed on to rv */
270
str = php_str_to_str(tmpstr, tmplen, "'", 1, "''", 2, &len);
273
ZVAL_STRINGL(*rv, str, len, 0);