summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWez Furlong <wez@php.net>2005-02-26 15:44:38 +0000
committerWez Furlong <wez@php.net>2005-02-26 15:44:38 +0000
commitb4ad599df24d712e6bc4aaf30f04d3fce5658431 (patch)
tree151a54d00a5a18e262361aa0bc8d272e43c1ac02
parent31f5f8f907d14aceac53cbf70b1a9bed17fe3499 (diff)
downloadphp-git-b4ad599df24d712e6bc4aaf30f04d3fce5658431.tar.gz
fix for PECL #3545
-rw-r--r--ext/pdo/pdo_sql_parser.re38
1 files changed, 29 insertions, 9 deletions
diff --git a/ext/pdo/pdo_sql_parser.re b/ext/pdo/pdo_sql_parser.re
index 97e7616f5d..9666a62418 100644
--- a/ext/pdo/pdo_sql_parser.re
+++ b/ext/pdo/pdo_sql_parser.re
@@ -189,18 +189,38 @@ PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, int inquery_len,
ret = -1;
goto clean_up;
}
+ plc->freeq = 1;
} else {
- convert_to_string(param->parameter);
- if (!stmt->dbh->methods->quoter(stmt->dbh, Z_STRVAL_P(param->parameter),
- Z_STRLEN_P(param->parameter), &plc->quoted, &plc->qlen,
- param->param_type TSRMLS_CC)) {
- /* bork */
- ret = -1;
- strcpy(stmt->error_code, stmt->dbh->error_code);
- goto clean_up;
+ switch (Z_TYPE_P(param->parameter)) {
+ case IS_NULL:
+ plc->quoted = "NULL";
+ plc->qlen = sizeof("NULL")-1;
+ plc->freeq = 0;
+ break;
+
+ case IS_BOOL:
+ convert_to_long(param->parameter);
+ case IS_LONG:
+ case IS_DOUBLE:
+ convert_to_string(param->parameter);
+ plc->qlen = Z_STRLEN_P(param->parameter);
+ plc->quoted = Z_STRLEN_P(param->parameter);
+ plc->freeq = 0;
+ break;
+
+ default:
+ convert_to_string(param->parameter);
+ if (!stmt->dbh->methods->quoter(stmt->dbh, Z_STRVAL_P(param->parameter),
+ Z_STRLEN_P(param->parameter), &plc->quoted, &plc->qlen,
+ param->param_type TSRMLS_CC)) {
+ /* bork */
+ ret = -1;
+ strcpy(stmt->error_code, stmt->dbh->error_code);
+ goto clean_up;
+ }
+ plc->freeq = 1;
}
}
- plc->freeq = 1;
} else {
plc->quoted = Z_STRVAL_P(param->parameter);
plc->qlen = Z_STRLEN_P(param->parameter);