diff options
| author | Xinchen Hui <laruence@gmail.com> | 2014-04-24 21:14:36 +0800 | 
|---|---|---|
| committer | Xinchen Hui <laruence@gmail.com> | 2014-04-24 21:14:36 +0800 | 
| commit | 9fe853130951cff085907c0ac136edd31ec52288 (patch) | |
| tree | fa894428745975ec54cbc85e81a24998c21fca1a /ext/pdo_sqlite/sqlite_statement.c | |
| parent | 9824418c61974e4d8bef372da91e64deadbfdd9b (diff) | |
| download | php-git-9fe853130951cff085907c0ac136edd31ec52288.tar.gz | |
Various bugs fixed
Diffstat (limited to 'ext/pdo_sqlite/sqlite_statement.c')
| -rw-r--r-- | ext/pdo_sqlite/sqlite_statement.c | 51 | 
1 files changed, 33 insertions, 18 deletions
| diff --git a/ext/pdo_sqlite/sqlite_statement.c b/ext/pdo_sqlite/sqlite_statement.c index 83d2a3f238..5f18c8a0cf 100644 --- a/ext/pdo_sqlite/sqlite_statement.c +++ b/ext/pdo_sqlite/sqlite_statement.c @@ -79,6 +79,7 @@ static int pdo_sqlite_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_d  		enum pdo_param_event event_type TSRMLS_DC)  {  	pdo_sqlite_stmt *S = (pdo_sqlite_stmt*)stmt->driver_data; +	zval *parameter;  	switch (event_type) {  		case PDO_PARAM_EVT_EXEC_PRE: @@ -106,18 +107,23 @@ static int pdo_sqlite_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_d  					case PDO_PARAM_INT:  					case PDO_PARAM_BOOL: -						if (Z_TYPE(param->parameter) == IS_NULL) { +						if (Z_ISREF(param->parameter)) { +							parameter = Z_REFVAL(param->parameter); +						} else { +							parameter = ¶m->parameter; +						} +						if (Z_TYPE_P(parameter) == IS_NULL) {  							if (sqlite3_bind_null(S->stmt, param->paramno + 1) == SQLITE_OK) {  								return 1;  							}  						} else { -							convert_to_long(¶m->parameter); +							convert_to_long(parameter);  #if LONG_MAX > 2147483647 -							if (SQLITE_OK == sqlite3_bind_int64(S->stmt, param->paramno + 1, Z_LVAL(param->parameter))) { +							if (SQLITE_OK == sqlite3_bind_int64(S->stmt, param->paramno + 1, Z_LVAL_P(parameter))) {  								return 1;  							}  #else -							if (SQLITE_OK == sqlite3_bind_int(S->stmt, param->paramno + 1, Z_LVAL(param->parameter))) { +							if (SQLITE_OK == sqlite3_bind_int(S->stmt, param->paramno + 1, Z_LVAL_P(parameter))) {  								return 1;  							}  #endif @@ -126,46 +132,55 @@ static int pdo_sqlite_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_d  						return 0;  					case PDO_PARAM_LOB: -						if (Z_TYPE(param->parameter) == IS_RESOURCE) { +						if (Z_ISREF(param->parameter)) { +							parameter = Z_REFVAL(param->parameter); +						} else { +							parameter = ¶m->parameter; +						} +						if (Z_TYPE_P(parameter) == IS_RESOURCE) {  							php_stream *stm; -							php_stream_from_zval_no_verify(stm, ¶m->parameter); +							php_stream_from_zval_no_verify(stm, parameter);  							if (stm) { -								zval_ptr_dtor(¶m->parameter); -								ZVAL_STR(¶m->parameter, php_stream_copy_to_mem(stm,	PHP_STREAM_COPY_ALL, 0)); +								zval_ptr_dtor(parameter); +								ZVAL_STR(parameter, php_stream_copy_to_mem(stm, PHP_STREAM_COPY_ALL, 0));  							} else {  								pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource" TSRMLS_CC);  								return 0;  							} -						} else if (Z_TYPE(param->parameter) == IS_NULL) { +						} else if (Z_TYPE_P(parameter) == IS_NULL) {  							if (sqlite3_bind_null(S->stmt, param->paramno + 1) == SQLITE_OK) {  								return 1;  							}  							pdo_sqlite_error_stmt(stmt);  							return 0;  						} else { -							convert_to_string(¶m->parameter); +							convert_to_string(parameter);  						}  						if (SQLITE_OK == sqlite3_bind_blob(S->stmt, param->paramno + 1, -								Z_STRVAL(param->parameter), -								Z_STRLEN(param->parameter), +								Z_STRVAL_P(parameter), +								Z_STRLEN_P(parameter),  								SQLITE_STATIC)) {  							return 1;	  						} -						pdo_sqlite_error_stmt(stmt);  						return 0;  					case PDO_PARAM_STR:  					default: -						if (Z_TYPE(param->parameter) == IS_NULL) { +						if (Z_ISREF(param->parameter)) { +							parameter = Z_REFVAL(param->parameter); +						} else { +							parameter = ¶m->parameter; +						} +						if (Z_TYPE_P(parameter) == IS_NULL) {  							if (sqlite3_bind_null(S->stmt, param->paramno + 1) == SQLITE_OK) {  								return 1;  							}  						} else { -							convert_to_string(¶m->parameter); -							if(SQLITE_OK == sqlite3_bind_text(S->stmt, param->paramno + 1, -									Z_STRVAL(param->parameter), -									Z_STRLEN(param->parameter), +							convert_to_string(parameter); +							if (SQLITE_OK == sqlite3_bind_text(S->stmt, param->paramno + 1, +									Z_STRVAL_P(parameter), +									Z_STRLEN_P(parameter),  									SQLITE_STATIC)) {  								return 1;	  							} | 
