-
-
Save cmb69/950613abe8b554502bf9749efd5df9c9 to your computer and use it in GitHub Desktop.
sqlite3_bind_*() return value checking
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
ext/sqlite3/sqlite3.c | 37 +++++++++++++++++++++++++++++-------- | |
1 file changed, 29 insertions(+), 8 deletions(-) | |
diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c | |
index 31f062dd22..9e0c80430f 100644 | |
--- a/ext/sqlite3/sqlite3.c | |
+++ b/ext/sqlite3/sqlite3.c | |
@@ -1572,7 +1572,10 @@ PHP_METHOD(sqlite3stmt, execute) | |
/* If the ZVAL is null then it should be bound as that */ | |
if (Z_TYPE_P(parameter) == IS_NULL) { | |
- sqlite3_bind_null(stmt_obj->stmt, param->param_number); | |
+ return_code = sqlite3_bind_null(stmt_obj->stmt, param->param_number); | |
+ if (return_code != SQLITE_OK) { | |
+ php_sqlite3_error(stmt_obj->db_obj, "Unable to bind parameter number " ZEND_LONG_FMT " (%d)", param->param_number, return_code); | |
+ } | |
continue; | |
} | |
@@ -1580,15 +1583,21 @@ PHP_METHOD(sqlite3stmt, execute) | |
case SQLITE_INTEGER: | |
convert_to_long(parameter); | |
#if ZEND_LONG_MAX > 2147483647 | |
- sqlite3_bind_int64(stmt_obj->stmt, param->param_number, Z_LVAL_P(parameter)); | |
+ return_code = sqlite3_bind_int64(stmt_obj->stmt, param->param_number, Z_LVAL_P(parameter)); | |
#else | |
- sqlite3_bind_int(stmt_obj->stmt, param->param_number, Z_LVAL_P(parameter)); | |
+ return_code = sqlite3_bind_int(stmt_obj->stmt, param->param_number, Z_LVAL_P(parameter)); | |
#endif | |
+ if (return_code != SQLITE_OK) { | |
+ php_sqlite3_error(stmt_obj->db_obj, "Unable to bind parameter number " ZEND_LONG_FMT " (%d)", param->param_number, return_code); | |
+ } | |
break; | |
case SQLITE_FLOAT: | |
convert_to_double(parameter); | |
- sqlite3_bind_double(stmt_obj->stmt, param->param_number, Z_DVAL_P(parameter)); | |
+ return_code = sqlite3_bind_double(stmt_obj->stmt, param->param_number, Z_DVAL_P(parameter)); | |
+ if (return_code != SQLITE_OK) { | |
+ php_sqlite3_error(stmt_obj->db_obj, "Unable to bind parameter number " ZEND_LONG_FMT " (%d)", param->param_number, return_code); | |
+ } | |
break; | |
case SQLITE_BLOB: | |
@@ -1607,21 +1616,33 @@ PHP_METHOD(sqlite3stmt, execute) | |
} | |
if (buffer) { | |
- sqlite3_bind_blob(stmt_obj->stmt, param->param_number, ZSTR_VAL(buffer), ZSTR_LEN(buffer), SQLITE_TRANSIENT); | |
+ return_code = sqlite3_bind_blob(stmt_obj->stmt, param->param_number, ZSTR_VAL(buffer), ZSTR_LEN(buffer), SQLITE_TRANSIENT); | |
zend_string_release_ex(buffer, 0); | |
+ if (return_code != SQLITE_OK) { | |
+ php_sqlite3_error(stmt_obj->db_obj, "Unable to bind parameter number " ZEND_LONG_FMT " (%d)", param->param_number, return_code); | |
+ } | |
} else { | |
- sqlite3_bind_null(stmt_obj->stmt, param->param_number); | |
+ return_code = sqlite3_bind_null(stmt_obj->stmt, param->param_number); | |
+ if (return_code != SQLITE_OK) { | |
+ php_sqlite3_error(stmt_obj->db_obj, "Unable to bind parameter number " ZEND_LONG_FMT " (%d)", param->param_number, return_code); | |
+ } | |
} | |
break; | |
} | |
case SQLITE3_TEXT: | |
convert_to_string(parameter); | |
- sqlite3_bind_text(stmt_obj->stmt, param->param_number, Z_STRVAL_P(parameter), Z_STRLEN_P(parameter), SQLITE_STATIC); | |
+ return_code = sqlite3_bind_text(stmt_obj->stmt, param->param_number, Z_STRVAL_P(parameter), Z_STRLEN_P(parameter), SQLITE_STATIC); | |
+ if (return_code != SQLITE_OK) { | |
+ php_sqlite3_error(stmt_obj->db_obj, "Unable to bind parameter number " ZEND_LONG_FMT " (%d)", param->param_number, return_code); | |
+ } | |
break; | |
case SQLITE_NULL: | |
- sqlite3_bind_null(stmt_obj->stmt, param->param_number); | |
+ return_code = sqlite3_bind_null(stmt_obj->stmt, param->param_number); | |
+ if (return_code != SQLITE_OK) { | |
+ php_sqlite3_error(stmt_obj->db_obj, "Unable to bind parameter number " ZEND_LONG_FMT " (%d)", param->param_number, return_code); | |
+ } | |
break; | |
default: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Execute statement | |
object(SQLite3Result)#3 (0) { | |
} | |
Statement result | |
array(3) { | |
[0]=> | |
int(42) | |
[1]=> | |
string(3) "PHP" | |
[2]=> | |
int(424242) | |
} | |
Change binded values | |
Execute statement | |
Fatal error: Uncaught Exception: Unable to bind parameter number 1 (21) in /mnt/c/Users/cmb/php-dev/sqlite3.php:27 | |
Stack trace: | |
#0 /mnt/c/Users/cmb/php-dev/sqlite3.php(27): SQLite3Stmt->execute() | |
#1 {main} | |
Next Exception: Unable to bind parameter number 2 (21) in /mnt/c/Users/cmb/php-dev/sqlite3.php:27 | |
Stack trace: | |
#0 /mnt/c/Users/cmb/php-dev/sqlite3.php(27): SQLite3Stmt->execute() | |
#1 {main} | |
Next Exception: Unable to bind parameter number 3 (21) in /mnt/c/Users/cmb/php-dev/sqlite3.php:27 | |
Stack trace: | |
#0 /mnt/c/Users/cmb/php-dev/sqlite3.php(27): SQLite3Stmt->execute() | |
#1 {main} | |
thrown in /mnt/c/Users/cmb/php-dev/sqlite3.php on line 27 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Execute statement | |
object(SQLite3Result)#3 (0) { | |
} | |
Statement result | |
array(1) { | |
[0]=> | |
string(2) "42" | |
} | |
Change binded values | |
Execute statement | |
Fatal error: Uncaught Exception: Unable to bind parameter number 1 (21) in /mnt/c/Users/cmb/php-dev/sqlite3.php:23 | |
Stack trace: | |
#0 /mnt/c/Users/cmb/php-dev/sqlite3.php(23): SQLite3Stmt->execute() | |
#1 {main} | |
thrown in /mnt/c/Users/cmb/php-dev/sqlite3.php on line 23 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment