]> granicus.if.org Git - php/commitdiff
MFB:
authorScott MacVicar <scottmac@php.net>
Fri, 7 Mar 2008 17:02:48 +0000 (17:02 +0000)
committerScott MacVicar <scottmac@php.net>
Fri, 7 Mar 2008 17:02:48 +0000 (17:02 +0000)
Fixed bug #41135 (When binding as binary data use sqlite3_bind_blob() to stop errors with null bytes.)
Fixed bug #42443 (Bind integers and booleans as integers rather than strings.)

ext/pdo_sqlite/sqlite_statement.c

index 5e8ef02043619f0587f1e4429ca15cb8ed6023b7..7bd175c98ba69ad68bc05489cb6b611b47b7c763 100644 (file)
@@ -103,13 +103,28 @@ static int pdo_sqlite_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_d
                                                }
                                                pdo_sqlite_error_stmt(stmt);
                                                return 0;
-                                       
+
+                                       case PDO_PARAM_INT:
+                                       case PDO_PARAM_BOOL:
+                                               if (Z_TYPE_P(param->parameter) == IS_NULL) {
+                                                       if (sqlite3_bind_null(S->stmt, param->paramno + 1) == SQLITE_OK) {
+                                                               return 1;
+                                                       }
+                                               } else {
+                                                       convert_to_long(param->parameter);
+                                                       if (SQLITE_OK == sqlite3_bind_int(S->stmt, param->paramno + 1, Z_LVAL_P(param->parameter))) {
+                                                               return 1;
+                                                       }
+                                               }
+                                               pdo_sqlite_error_stmt(stmt);
+                                               return 0;                                       
+       
                                        case PDO_PARAM_LOB:
                                                if (Z_TYPE_P(param->parameter) == IS_RESOURCE) {
                                                        php_stream *stm;
                                                        php_stream_from_zval_no_verify(stm, &param->parameter);
                                                        if (stm) {
-                                                               SEPARATE_ZVAL_IF_NOT_REF(&param->parameter);
+                                                               SEPARATE_ZVAL(&param->parameter);
                                                                Z_TYPE_P(param->parameter) = IS_STRING;
                                                                Z_STRLEN_P(param->parameter) = php_stream_copy_to_mem(stm,
                                                                        &Z_STRVAL_P(param->parameter), PHP_STREAM_COPY_ALL, 0);
@@ -117,9 +132,25 @@ static int pdo_sqlite_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_d
                                                                pdo_raise_impl_error(stmt->dbh, stmt, "HY105", "Expected a stream resource" TSRMLS_CC);
                                                                return 0;
                                                        }
+                                               } else if (Z_TYPE_P(param->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);
                                                }
-                                               /* fall through */
-               
+                                               
+                                               if (SQLITE_OK == sqlite3_bind_blob(S->stmt, param->paramno + 1,
+                                                               Z_STRVAL_P(param->parameter),
+                                                               Z_STRLEN_P(param->parameter),
+                                                               SQLITE_STATIC)) {
+                                                       return 1;       
+                                               }
+                                               pdo_sqlite_error_stmt(stmt);
+                                               return 0;
+
                                        case PDO_PARAM_STR:
                                        default:
                                                if (Z_TYPE_P(param->parameter) == IS_NULL) {