From: Julien Pauli Date: Tue, 12 Jul 2016 09:17:36 +0000 (+0200) Subject: Merge branch 'PHP-5.6' into PHP-7.0 X-Git-Tag: php-7.1.0beta1~98^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ec285762605e5fdda747f2c9923609be8c4e7354;p=php Merge branch 'PHP-5.6' into PHP-7.0 * PHP-5.6: Updated NEWS Fixes #52384: Adds parameter value to dumped output. Also adds output flag indicating presence of PDO::PARAM_INPUT_OUTPUT. Conflicts: ext/pdo/pdo_stmt.c --- ec285762605e5fdda747f2c9923609be8c4e7354 diff --cc ext/pdo/pdo_stmt.c index fdf5415315,2c089f1da6..3437869eec --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@@ -2118,23 -2144,54 +2118,58 @@@ static PHP_METHOD(PDOStatement, debugDu stmt->bound_params ? zend_hash_num_elements(stmt->bound_params) : 0); if (stmt->bound_params) { - zend_hash_internal_pointer_reset_ex(stmt->bound_params, &pos); - while (SUCCESS == zend_hash_get_current_data_ex(stmt->bound_params, - (void**)¶m, &pos)) { - char *str; - uint len; - ulong num; - int res; - - res = zend_hash_get_current_key_ex(stmt->bound_params, &str, &len, &num, 0, &pos); - if (res == HASH_KEY_IS_LONG) { - php_stream_printf(out TSRMLS_CC, "Key: Position #%ld:\n", num); - } else if (res == HASH_KEY_IS_STRING) { - php_stream_printf(out TSRMLS_CC, "Key: Name: [%d] %.*s\n", len, len, str); + zend_ulong num; + zend_string *key = NULL; ++ zval parameter; + ZEND_HASH_FOREACH_KEY_PTR(stmt->bound_params, num, key, param) { + if (key) { + php_stream_printf(out, "Key: Name: [%zd] %.*s\n", + ZSTR_LEN(key), (int) ZSTR_LEN(key), ZSTR_VAL(key)); + } else { + php_stream_printf(out, "Key: Position #%pd:\n", num); } - php_stream_printf(out, "paramno=%pd\nname=[%zd] \"%.*s\"\nis_param=%d\nparam_type=%d\n", - php_stream_printf(out TSRMLS_CC, "paramno=%ld\nname=[%d] \"%.*s\"\nis_param=%d\nparam_type=%d\nis_input_output=%d\n", - param->paramno, param->namelen, param->namelen, param->name ? param->name : "", - param->is_param, - PDO_PARAM_TYPE(param->param_type), - (param->param_type & PDO_PARAM_INPUT_OUTPUT) == PDO_PARAM_INPUT_OUTPUT); ++ php_stream_printf(out, "paramno=%pd\nname=[%zd] \"%.*s\"\nis_param=%d\nparam_type=%d\nis_input_output=%d\n", + param->paramno, param->name ? ZSTR_LEN(param->name) : 0, param->name ? (int) ZSTR_LEN(param->name) : 0, + param->name ? ZSTR_VAL(param->name) : "", + param->is_param, - param->param_type); ++ PDO_PARAM_TYPE(param->param_type), ++ (param->param_type & PDO_PARAM_INPUT_OUTPUT) == PDO_PARAM_INPUT_OUTPUT); + + /* + * Check the type of the parameter and print out the value. + * + * Most are self explanatory with the following exceptions: + * PDO::PARAM_INT evaluates to a long + * PDO::PARAM_LOB evaluates to a string + */ - switch (Z_TYPE_P(param->parameter)) { - case IS_BOOL: - php_stream_printf(out TSRMLS_CC, "param_value=%s\n", Z_BVAL_P(param->parameter)?"true":"false"); ++ parameter = param->parameter; ++again: ++ switch (Z_TYPE(parameter)) { ++ case IS_REFERENCE: ++ parameter = *Z_REFVAL(parameter); ++ goto again; ++ case IS_TRUE: ++ php_stream_printf(out, "param_value=true\n"); ++ break; ++ case IS_FALSE: ++ php_stream_printf(out, "param_value=false\n"); + break; + case IS_NULL: - php_stream_printf(out TSRMLS_CC, "param_value=null\n"); ++ php_stream_printf(out, "param_value=null\n"); + break; + case IS_LONG: - php_stream_printf(out TSRMLS_CC, "param_value=%ld\n", Z_LVAL_P(param->parameter)); ++ php_stream_printf(out, "param_value=%ld\n", Z_LVAL(parameter)); + break; + case IS_STRING: - php_stream_printf(out TSRMLS_CC, "param_value=%s\n", Z_STRVAL_P(param->parameter)); ++ php_stream_printf(out, "param_value=%s\n", Z_STRVAL(parameter)); + break; + default: - php_stream_printf(out TSRMLS_CC, "param_value=unknown\n"); ++ php_stream_printf(out, "param_value=unknown\n"); + break; + } - zend_hash_move_forward_ex(stmt->bound_params, &pos); - } + } ZEND_HASH_FOREACH_END(); } php_stream_close(out);