version 1.1.1.1, 2012/02/21 23:47:59
|
version 1.1.1.2, 2012/05/29 12:34:41
|
Line 59 static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
|
Line 59 static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
|
pefree(S->einfo.errmsg, stmt->dbh->is_persistent); |
pefree(S->einfo.errmsg, stmt->dbh->is_persistent); |
S->einfo.errmsg = NULL; |
S->einfo.errmsg = NULL; |
} |
} |
#if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND |
|
if (S->stmt) { |
if (S->stmt) { |
pdo_mysql_stmt_close(S->stmt); |
pdo_mysql_stmt_close(S->stmt); |
S->stmt = NULL; |
S->stmt = NULL; |
} |
} |
#endif /* HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND */ |
|
|
|
#ifndef PDO_USE_MYSQLND |
#ifndef PDO_USE_MYSQLND |
if (S->params) { |
if (S->params) { |
Line 77 static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
|
Line 75 static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
|
efree(S->in_length); |
efree(S->in_length); |
} |
} |
|
|
#endif /* PDO_USE_MYSQLND */ |
|
|
|
#ifdef HAVE_MYSQL_STMT_PREPARE |
|
if (S->bound_result) |
if (S->bound_result) |
{ |
{ |
int i; |
int i; |
Line 91 static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
|
Line 86 static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
|
efree(S->out_null); |
efree(S->out_null); |
efree(S->out_length); |
efree(S->out_length); |
} |
} |
#endif /* HAVE_MYSQL_STMT_PREPARE */ | #endif |
|
|
|
|
#if HAVE_MYSQL_NEXT_RESULT || PDO_USE_MYSQLND |
|
if (S->H->server) { |
if (S->H->server) { |
while (mysql_more_results(S->H->server)) { |
while (mysql_more_results(S->H->server)) { |
MYSQL_RES *res; |
MYSQL_RES *res; |
Line 107 static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
|
Line 101 static int pdo_mysql_stmt_dtor(pdo_stmt_t *stmt TSRMLS
|
mysql_free_result(res); |
mysql_free_result(res); |
} |
} |
} |
} |
} | } |
#endif /* HAVE_MYSQL_NEXT_RESULT || PDO_USE_MYSQLND */ | |
#if PDO_USE_MYSQLND |
#if PDO_USE_MYSQLND |
if (!S->stmt && S->current_data) { |
if (!S->stmt && S->current_data) { |
mnd_free(S->current_data); |
mnd_free(S->current_data); |
Line 131 static void pdo_mysql_stmt_set_row_count(pdo_stmt_t *s
|
Line 125 static void pdo_mysql_stmt_set_row_count(pdo_stmt_t *s
|
} |
} |
/* }}} */ |
/* }}} */ |
|
|
#ifdef HAVE_MYSQL_STMT_PREPARE | static int pdo_mysql_fill_stmt_from_result(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */ |
| { |
| pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data; |
| pdo_mysql_db_handle *H = S->H; |
| my_ulonglong row_count; |
| PDO_DBG_ENTER("pdo_mysql_fill_stmt_from_result"); |
| |
| row_count = mysql_affected_rows(H->server); |
| if (row_count == (my_ulonglong)-1) { |
| /* we either have a query that returned a result set or an error occured |
| lets see if we have access to a result set */ |
| if (!H->buffered) { |
| S->result = mysql_use_result(H->server); |
| } else { |
| S->result = mysql_store_result(H->server); |
| } |
| if (NULL == S->result) { |
| pdo_mysql_error_stmt(stmt); |
| PDO_DBG_RETURN(0); |
| } |
| |
| stmt->row_count = (long) mysql_num_rows(S->result); |
| stmt->column_count = (int) mysql_num_fields(S->result); |
| S->fields = mysql_fetch_fields(S->result); |
| } else { |
| /* this was a DML or DDL query (INSERT, UPDATE, DELETE, ... */ |
| stmt->row_count = (long) row_count; |
| } |
| |
| PDO_DBG_RETURN(1); |
| } |
| /* }}} */ |
| |
| #ifndef PDO_USE_MYSQLND |
static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */ |
static int pdo_mysql_stmt_execute_prepared_libmysql(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */ |
{ |
{ |
pdo_mysql_stmt *S = stmt->driver_data; |
pdo_mysql_stmt *S = stmt->driver_data; |
Line 289 static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSR
|
Line 316 static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSR
|
{ |
{ |
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data; |
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data; |
pdo_mysql_db_handle *H = S->H; |
pdo_mysql_db_handle *H = S->H; |
my_ulonglong row_count; |
|
PDO_DBG_ENTER("pdo_mysql_stmt_execute"); |
PDO_DBG_ENTER("pdo_mysql_stmt_execute"); |
PDO_DBG_INF_FMT("stmt=%p", S->stmt); |
PDO_DBG_INF_FMT("stmt=%p", S->stmt); |
|
|
#if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND |
|
if (S->stmt) { |
if (S->stmt) { |
PDO_DBG_RETURN(pdo_mysql_stmt_execute_prepared(stmt)); |
PDO_DBG_RETURN(pdo_mysql_stmt_execute_prepared(stmt)); |
} |
} |
#endif |
|
|
|
/* ensure that we free any previous unfetched results */ |
/* ensure that we free any previous unfetched results */ |
if (S->result) { |
if (S->result) { |
Line 310 static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSR
|
Line 334 static int pdo_mysql_stmt_execute(pdo_stmt_t *stmt TSR
|
PDO_DBG_RETURN(0); |
PDO_DBG_RETURN(0); |
} |
} |
|
|
row_count = mysql_affected_rows(H->server); | PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt TSRMLS_CC)); |
if (row_count == (my_ulonglong)-1) { | |
/* we either have a query that returned a result set or an error occured | |
lets see if we have access to a result set */ | |
if (!H->buffered) { | |
S->result = mysql_use_result(H->server); | |
} else { | |
S->result = mysql_store_result(H->server); | |
} | |
if (NULL == S->result) { | |
pdo_mysql_error_stmt(stmt); | |
PDO_DBG_RETURN(0); | |
} | |
| |
stmt->row_count = (long) mysql_num_rows(S->result); | |
stmt->column_count = (int) mysql_num_fields(S->result); | |
S->fields = mysql_fetch_fields(S->result); | |
| |
} else { | |
/* this was a DML or DDL query (INSERT, UPDATE, DELETE, ... */ | |
stmt->row_count = (long) row_count; | |
} | |
| |
PDO_DBG_RETURN(1); | |
} |
} |
/* }}} */ |
/* }}} */ |
|
|
static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */ |
static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) /* {{{ */ |
{ |
{ |
#if HAVE_MYSQL_NEXT_RESULT || PDO_USE_MYSQLND |
|
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data; |
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data; |
pdo_mysql_db_handle *H = S->H; |
pdo_mysql_db_handle *H = S->H; |
long row_count; |
long row_count; |
Line 401 static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt
|
Line 401 static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt
|
#endif |
#endif |
|
|
/* ensure that we free any previous unfetched results */ |
/* ensure that we free any previous unfetched results */ |
#if HAVE_MYSQL_STMT_PREPARE | #ifndef PDO_USE_MYSQLND |
if (S->stmt) { |
if (S->stmt) { |
stmt->column_count = (int)mysql_num_fields(S->result); |
stmt->column_count = (int)mysql_num_fields(S->result); |
mysql_stmt_free_result(S->stmt); |
mysql_stmt_free_result(S->stmt); |
Line 421 static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt
|
Line 421 static int pdo_mysql_stmt_next_rowset(pdo_stmt_t *stmt
|
/* No more results */ |
/* No more results */ |
PDO_DBG_RETURN(0); |
PDO_DBG_RETURN(0); |
} else { |
} else { |
if (!H->buffered) { | PDO_DBG_RETURN(pdo_mysql_fill_stmt_from_result(stmt TSRMLS_CC)); |
S->result = mysql_use_result(H->server); | |
row_count = 0; | |
} else { | |
S->result = mysql_store_result(H->server); | |
if ((long)-1 == (row_count = (long) mysql_affected_rows(H->server))) { | |
pdo_mysql_error_stmt(stmt); | |
PDO_DBG_RETURN(0); | |
} | |
} | |
| |
if (NULL == S->result) { | |
PDO_DBG_RETURN(0); | |
} | |
| |
stmt->row_count = row_count; | |
stmt->column_count = (int) mysql_num_fields(S->result); | |
S->fields = mysql_fetch_fields(S->result); | |
PDO_DBG_RETURN(1); | |
} |
} |
#else |
|
strcpy(stmt->error_code, "HYC00"); |
|
PDO_DBG_RETURN(0); |
|
#endif /* HAVE_MYSQL_STMT_PREPARE */ |
|
} |
} |
/* }}} */ |
/* }}} */ |
|
|
Line 466 static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt,
|
Line 444 static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt,
|
#ifndef PDO_USE_MYSQLND |
#ifndef PDO_USE_MYSQLND |
PDO_MYSQL_PARAM_BIND *b; |
PDO_MYSQL_PARAM_BIND *b; |
#endif |
#endif |
#if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND |
|
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data; |
pdo_mysql_stmt *S = (pdo_mysql_stmt*)stmt->driver_data; |
|
|
PDO_DBG_ENTER("pdo_mysql_stmt_param_hook"); |
PDO_DBG_ENTER("pdo_mysql_stmt_param_hook"); |
Line 598 static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt,
|
Line 575 static int pdo_mysql_stmt_param_hook(pdo_stmt_t *stmt,
|
break; |
break; |
} |
} |
} |
} |
#endif /* HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND */ | |
PDO_DBG_RETURN(1); |
PDO_DBG_RETURN(1); |
} |
} |
/* }}} */ |
/* }}} */ |
Line 619 static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum
|
Line 596 static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum
|
PDO_DBG_RETURN(1); |
PDO_DBG_RETURN(1); |
} |
} |
#else |
#else |
# if HAVE_MYSQL_STMT_PREPARE |
|
int ret; |
int ret; |
|
|
if (S->stmt) { |
if (S->stmt) { |
Line 640 static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum
|
Line 616 static int pdo_mysql_stmt_fetch(pdo_stmt_t *stmt, enum
|
|
|
PDO_DBG_RETURN(1); |
PDO_DBG_RETURN(1); |
} |
} |
# endif /* HAVE_MYSQL_STMT_PREPARE */ |
|
#endif /* PDO_USE_MYSQLND */ |
#endif /* PDO_USE_MYSQLND */ |
|
|
if (!S->result) { |
if (!S->result) { |
Line 731 static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in
|
Line 706 static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in
|
} |
} |
|
|
/* With mysqlnd data is stored inside mysqlnd, not S->current_data */ |
/* With mysqlnd data is stored inside mysqlnd, not S->current_data */ |
#if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND |
|
if (!S->stmt) { |
if (!S->stmt) { |
#endif |
|
if (S->current_data == NULL || !S->result) { |
if (S->current_data == NULL || !S->result) { |
PDO_DBG_RETURN(0); |
PDO_DBG_RETURN(0); |
} |
} |
#if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND |
|
} |
} |
#endif | |
if (colno >= stmt->column_count) { |
if (colno >= stmt->column_count) { |
/* error invalid column */ |
/* error invalid column */ |
PDO_DBG_RETURN(0); |
PDO_DBG_RETURN(0); |
Line 751 static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in
|
Line 723 static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in
|
*len = sizeof(zval); |
*len = sizeof(zval); |
PDO_DBG_RETURN(1); |
PDO_DBG_RETURN(1); |
} |
} |
#elif HAVE_MYSQL_STMT_PREPARE | #else |
if (S->stmt) { |
if (S->stmt) { |
if (S->out_null[colno]) { |
if (S->out_null[colno]) { |
*ptr = NULL; |
*ptr = NULL; |
Line 769 static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in
|
Line 741 static int pdo_mysql_stmt_get_col(pdo_stmt_t *stmt, in
|
*len = S->out_length[colno]; |
*len = S->out_length[colno]; |
PDO_DBG_RETURN(1); |
PDO_DBG_RETURN(1); |
} |
} |
#endif /* PDO_USE_MYSQLND else HAVE_MYSQL_STMT_PREPARE */ | #endif |
*ptr = S->current_data[colno]; |
*ptr = S->current_data[colno]; |
*len = S->current_lengths[colno]; |
*len = S->current_lengths[colno]; |
PDO_DBG_RETURN(1); |
PDO_DBG_RETURN(1); |
Line 887 static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, l
|
Line 859 static int pdo_mysql_stmt_col_meta(pdo_stmt_t *stmt, l
|
#endif |
#endif |
|
|
add_assoc_zval(return_value, "flags", flags); |
add_assoc_zval(return_value, "flags", flags); |
add_assoc_string(return_value, "table",(char *) (F->table?F->table:""), 1); | add_assoc_string(return_value, "table", (char *) (F->table?F->table:""), 1); |
PDO_DBG_RETURN(SUCCESS); |
PDO_DBG_RETURN(SUCCESS); |
} /* }}} */ |
} /* }}} */ |
|
|
Line 901 static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *st
|
Line 873 static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *st
|
mysql_free_result(S->result); |
mysql_free_result(S->result); |
S->result = NULL; |
S->result = NULL; |
} |
} |
#if HAVE_MYSQL_STMT_PREPARE || PDO_USE_MYSQLND |
|
if (S->stmt) { |
if (S->stmt) { |
int retval; |
int retval; |
retval = mysql_stmt_free_result(S->stmt); |
retval = mysql_stmt_free_result(S->stmt); |
PDO_DBG_RETURN(retval ? 0 : 1); |
PDO_DBG_RETURN(retval ? 0 : 1); |
} |
} |
#endif |
|
|
|
#if HAVE_MYSQL_NEXT_RESULT || PDO_USE_MYSQLND |
|
while (mysql_more_results(S->H->server)) { |
while (mysql_more_results(S->H->server)) { |
MYSQL_RES *res; |
MYSQL_RES *res; |
if (mysql_next_result(S->H->server) != 0) { |
if (mysql_next_result(S->H->server) != 0) { |
Line 920 static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *st
|
Line 889 static int pdo_mysql_stmt_cursor_closer(pdo_stmt_t *st
|
mysql_free_result(res); |
mysql_free_result(res); |
} |
} |
} |
} |
#endif |
|
PDO_DBG_RETURN(1); |
PDO_DBG_RETURN(1); |
} |
} |
/* }}} */ |
/* }}} */ |