summaryrefslogtreecommitdiff
path: root/ext/pdo_sqlite
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2014-04-24 21:14:36 +0800
committerXinchen Hui <laruence@gmail.com>2014-04-24 21:14:36 +0800
commit9fe853130951cff085907c0ac136edd31ec52288 (patch)
treefa894428745975ec54cbc85e81a24998c21fca1a /ext/pdo_sqlite
parent9824418c61974e4d8bef372da91e64deadbfdd9b (diff)
downloadphp-git-9fe853130951cff085907c0ac136edd31ec52288.tar.gz
Various bugs fixed
Diffstat (limited to 'ext/pdo_sqlite')
-rw-r--r--ext/pdo_sqlite/sqlite_statement.c51
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 = &param->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(&param->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 = &param->parameter;
+ }
+ if (Z_TYPE_P(parameter) == IS_RESOURCE) {
php_stream *stm;
- php_stream_from_zval_no_verify(stm, &param->parameter);
+ php_stream_from_zval_no_verify(stm, parameter);
if (stm) {
- zval_ptr_dtor(&param->parameter);
- ZVAL_STR(&param->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(&param->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 = &param->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(&param->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;
}