diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index e4ef3cc00057..39ac9cb1ce65 100644 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -1626,18 +1626,16 @@ bool pdo_stmt_setup_fetch_mode(pdo_stmt_t *stmt, zend_long mode, uint32_t mode_a pdo_stmt_free_default_fetch_mode(stmt); - stmt->default_fetch_type = PDO_FETCH_BOTH; + stmt->default_fetch_type = stmt->dbh->default_fetch_type; flags = mode & PDO_FETCH_FLAGS; - if ((mode & ~PDO_FETCH_FLAGS) == PDO_FETCH_USE_DEFAULT) { - mode = stmt->dbh->default_fetch_type | flags; - } - if (!pdo_verify_fetch_mode(stmt->default_fetch_type, mode, mode_arg_num, false)) { return false; } + bool use_default = (mode & ~PDO_FETCH_FLAGS) == PDO_FETCH_USE_DEFAULT; + switch (mode & ~PDO_FETCH_FLAGS) { case PDO_FETCH_USE_DEFAULT: case PDO_FETCH_LAZY: @@ -1754,7 +1752,9 @@ bool pdo_stmt_setup_fetch_mode(pdo_stmt_t *stmt, zend_long mode, uint32_t mode_a return false; } - stmt->default_fetch_type = mode; + if (!use_default) { + stmt->default_fetch_type = mode; + } return true; }