]> granicus.if.org Git - php/commitdiff
fix for PECL #3545
authorWez Furlong <wez@php.net>
Sat, 26 Feb 2005 15:44:38 +0000 (15:44 +0000)
committerWez Furlong <wez@php.net>
Sat, 26 Feb 2005 15:44:38 +0000 (15:44 +0000)
ext/pdo/pdo_sql_parser.re

index 97e7616f5df8d9d148d869d2c1cf6fe774bc8493..9666a6241834c4f6655cc290f1db69f01a27b4d7 100644 (file)
@@ -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);