18
18
+----------------------------------------------------------------------+
21
/* $Id: pdo_stmt.c 288013 2009-09-03 22:53:25Z mbeccati $ */
21
/* $Id: pdo_stmt.c 292003 2009-12-11 22:30:46Z felipe $ */
23
23
/* The PDO Statement Handle Class */
1107
case PDO_FETCH_CLASS:
1108
if (ce->constructor && !(flags & PDO_FETCH_PROPS_LATE)) {
1109
stmt->fetch.cls.fci.object_pp = &return_value;
1110
stmt->fetch.cls.fcc.object_pp = &return_value;
1111
if (zend_call_function(&stmt->fetch.cls.fci, &stmt->fetch.cls.fcc TSRMLS_CC) == FAILURE) {
1112
pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "could not call class constructor" TSRMLS_CC);
1115
if (stmt->fetch.cls.retval_ptr) {
1116
zval_ptr_dtor(&stmt->fetch.cls.retval_ptr);
1120
if (flags & PDO_FETCH_CLASSTYPE) {
1121
do_fetch_opt_finish(stmt, 0 TSRMLS_CC);
1122
stmt->fetch.cls.ce = old_ce;
1123
stmt->fetch.cls.ctor_args = old_ctor_args;
1124
stmt->fetch.cls.fci.param_count = old_arg_count;
1105
1132
for (idx = 0; i < stmt->column_count; i++, idx++) {
1107
1134
MAKE_STD_ZVAL(val);
1238
case PDO_FETCH_CLASS:
1239
if (ce->constructor && !(flags & PDO_FETCH_PROPS_LATE)) {
1240
stmt->fetch.cls.fci.object_pp = &return_value;
1241
stmt->fetch.cls.fcc.object_pp = &return_value;
1242
if (zend_call_function(&stmt->fetch.cls.fci, &stmt->fetch.cls.fcc TSRMLS_CC) == FAILURE) {
1243
pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "could not call class constructor" TSRMLS_CC);
1246
if (stmt->fetch.cls.retval_ptr) {
1247
zval_ptr_dtor(&stmt->fetch.cls.retval_ptr);
1251
if (flags & PDO_FETCH_CLASSTYPE) {
1252
do_fetch_opt_finish(stmt, 0 TSRMLS_CC);
1253
stmt->fetch.cls.ce = old_ce;
1254
stmt->fetch.cls.ctor_args = old_ctor_args;
1255
stmt->fetch.cls.fci.param_count = old_arg_count;
1259
1265
case PDO_FETCH_FUNC:
1260
1266
stmt->fetch.func.fci.param_count = idx;
1261
1267
stmt->fetch.func.fci.retval_ptr_ptr = &retval;
1653
1659
static int register_bound_param(INTERNAL_FUNCTION_PARAMETERS, pdo_stmt_t *stmt, int is_param) /* {{{ */
1655
1661
struct pdo_bound_param_data param = {0};
1662
long param_type = PDO_PARAM_STR;
1657
1664
param.paramno = -1;
1658
param.param_type = PDO_PARAM_STR;
1660
1666
if (FAILURE == zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC,
1661
"lz|llz!", ¶m.paramno, ¶m.parameter, ¶m.param_type, ¶m.max_value_len,
1667
"lz|llz!", ¶m.paramno, ¶m.parameter, ¶m_type, ¶m.max_value_len,
1662
1668
¶m.driver_params)) {
1663
1669
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|llz!", ¶m.name,
1664
¶m.namelen, ¶m.parameter, ¶m.param_type, ¶m.max_value_len,
1670
¶m.namelen, ¶m.parameter, ¶m_type, ¶m.max_value_len,
1665
1671
¶m.driver_params)) {
1676
param.param_type = (int) param_type;
1670
1678
if (param.paramno > 0) {
1671
1679
--param.paramno; /* make it zero-based internally */
2598
2606
MAKE_STD_ZVAL(return_value);
2601
if (Z_TYPE_P(member) == IS_LONG) {
2602
if (Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count) {
2603
fetch_value(stmt, return_value, Z_LVAL_P(member), NULL TSRMLS_CC);
2606
convert_to_string(member);
2607
/* TODO: replace this with a hash of available column names to column
2609
for (colno = 0; colno < stmt->column_count; colno++) {
2610
if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {
2611
fetch_value(stmt, return_value, colno, NULL TSRMLS_CC);
2612
return_value->refcount = 0;
2613
return_value->is_ref = 0;
2614
return return_value;
2617
if (strcmp(Z_STRVAL_P(member), "queryString") == 0) {
2618
zval_ptr_dtor(&return_value);
2619
return std_object_handlers.read_property(object, member, IS_STRING TSRMLS_CC);
2610
if (Z_TYPE_P(member) == IS_LONG) {
2611
if (Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count) {
2612
fetch_value(stmt, return_value, Z_LVAL_P(member), NULL TSRMLS_CC);
2615
convert_to_string(member);
2616
/* TODO: replace this with a hash of available column names to column
2618
for (colno = 0; colno < stmt->column_count; colno++) {
2619
if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {
2620
fetch_value(stmt, return_value, colno, NULL TSRMLS_CC);
2621
return_value->refcount = 0;
2622
return_value->is_ref = 0;
2623
return return_value;
2626
if (strcmp(Z_STRVAL_P(member), "queryString") == 0) {
2627
zval_ptr_dtor(&return_value);
2628
return std_object_handlers.read_property(object, member, IS_STRING TSRMLS_CC);
2636
2646
pdo_stmt_t * stmt = (pdo_stmt_t *) zend_object_store_get_object(object TSRMLS_CC);
2637
2647
int colno = -1;
2639
if (Z_TYPE_P(member) == IS_LONG) {
2640
return Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count;
2642
convert_to_string(member);
2650
if (Z_TYPE_P(member) == IS_LONG) {
2651
return Z_LVAL_P(member) >= 0 && Z_LVAL_P(member) < stmt->column_count;
2653
convert_to_string(member);
2644
/* TODO: replace this with a hash of available column names to column
2646
for (colno = 0; colno < stmt->column_count; colno++) {
2647
if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {
2655
/* TODO: replace this with a hash of available column names to column
2657
for (colno = 0; colno < stmt->column_count; colno++) {
2658
if (strcmp(stmt->columns[colno].name, Z_STRVAL_P(member)) == 0) {