Skip to content

Commit 93cef8a

Browse files
committed
Mysqli: bind-in-execute (mysqlnd)
1 parent bd5ff73 commit 93cef8a

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

ext/mysqli/mysqli_api.c

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -819,15 +819,43 @@ PHP_FUNCTION(mysqli_stmt_execute)
819819
{
820820
MY_STMT *stmt;
821821
zval *mysql_stmt;
822+
zval *input_params = NULL;
822823
#ifndef MYSQLI_USE_MYSQLND
823824
unsigned int i;
824825
#endif
825826

826-
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O", &mysql_stmt, mysqli_stmt_class_entry) == FAILURE) {
827+
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(), "O|a", &mysql_stmt, mysqli_stmt_class_entry, &input_params) == FAILURE) {
827828
RETURN_THROWS();
828829
}
829830
MYSQLI_FETCH_RESOURCE_STMT(stmt, mysql_stmt, MYSQLI_STATUS_VALID);
830831

832+
// bind-in-execute
833+
#if defined(MYSQLI_USE_MYSQLND)
834+
if(input_params) {
835+
zval *tmp;
836+
unsigned int index;
837+
MYSQLND_PARAM_BIND *params;
838+
839+
params = mysqlnd_stmt_alloc_param_bind(stmt->stmt);
840+
if (!params) {
841+
// can we safely return here?
842+
RETVAL_FALSE;
843+
}
844+
845+
index = 0;
846+
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(input_params), tmp) {
847+
ZVAL_COPY_VALUE(&params[index].zv, tmp);
848+
params[index].type = MYSQL_TYPE_VAR_STRING;
849+
index++;
850+
} ZEND_HASH_FOREACH_END();
851+
852+
if(mysqlnd_stmt_bind_param(stmt->stmt, params)) {
853+
MYSQLI_REPORT_STMT_ERROR(stmt->stmt);
854+
RETVAL_FALSE;
855+
}
856+
}
857+
#endif
858+
831859
#ifndef MYSQLI_USE_MYSQLND
832860
if (stmt->param.var_cnt) {
833861
int j;

0 commit comments

Comments
 (0)