diff options
author | Bishop Bettini <bishop@php.net> | 2016-06-21 08:16:51 -0400 |
---|---|---|
committer | Julien Pauli <jpauli@php.net> | 2016-09-02 17:02:39 +0200 |
commit | 04115b4e3f37f24bdefb853c5c31eebd40ffff64 (patch) | |
tree | 1e3f6dffcb834e3d1ee5b8fe37b801a764011506 /ext/pdo | |
parent | 3a53194da914c4796358556400dc34370b2cb14b (diff) | |
download | php-git-04115b4e3f37f24bdefb853c5c31eebd40ffff64.tar.gz |
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
Diffstat (limited to 'ext/pdo')
-rw-r--r-- | ext/pdo/pdo_stmt.c | 36 | ||||
-rw-r--r-- | ext/pdo/tests/bug_52384.phpt | 84 |
2 files changed, 114 insertions, 6 deletions
diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 45024c11b7..f7d82df7a5 100644 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -2122,12 +2122,36 @@ static PHP_METHOD(PDOStatement, debugDumpParams) php_stream_printf(out, "Key: Position #" ZEND_ULONG_FMT ":\n", num); } - php_stream_printf(out, "paramno=%pd\nname=[%zd] \"%.*s\"\nis_param=%d\nparam_type=%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); - + 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); + + /* + * 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"); + break; + case IS_NULL: + php_stream_printf(out TSRMLS_CC, "param_value=null\n"); + break; + case IS_LONG: + php_stream_printf(out TSRMLS_CC, "param_value=%ld\n", Z_LVAL_P(param->parameter)); + break; + case IS_STRING: + php_stream_printf(out TSRMLS_CC, "param_value=%s\n", Z_STRVAL_P(param->parameter)); + break; + default: + php_stream_printf(out TSRMLS_CC, "param_value=unknown\n"); + break; + } } ZEND_HASH_FOREACH_END(); } diff --git a/ext/pdo/tests/bug_52384.phpt b/ext/pdo/tests/bug_52384.phpt new file mode 100644 index 0000000000..6d4127cbf6 --- /dev/null +++ b/ext/pdo/tests/bug_52384.phpt @@ -0,0 +1,84 @@ +--TEST-- +PDO Common: Bug #52384 (debugDumpParams does not emit the bind parameter value) +--SKIPIF-- +<?php # vim:ft=php +# PDOTEST_DSN=sqlite::memory: REDIR_TEST_DIR=ext/pdo/tests/ TEST_PHP_EXECUTABLE=sapi/cli/php sapi/cli/php run-tests.php ext/pdo/tests/bug_52384.phpt +if (!extension_loaded('pdo')) die('skip'); +$dir = getenv('REDIR_TEST_DIR'); +if (false == $dir) die('skip no driver'); +require_once $dir . 'pdo_test.inc'; +PDOTest::skip(); +?> +--FILE-- +<?php +if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/'); +require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc'; +$db = PDOTest::factory(); + +$a = 150; +$b = 'red'; +$c = true; +$d = null; +$e = str_repeat('a',1000); +$f = '1978-10-17'; + +$db->exec("CREATE TABLE test (a INT, b VARCHAR(10), c INT, d INT, e TEXT, f VARCHAR(10))"); +$sth = $db->prepare( + 'SELECT * FROM test WHERE a=:a AND b=:b AND c=:c AND d=:d AND e=:e AND f=:f' +); +$sth->bindParam(':a', $a, PDO::PARAM_INT); +$sth->bindValue(':b', $b, PDO::PARAM_STR); +$sth->bindValue(':c', $c, PDO::PARAM_BOOL); +$sth->bindValue(':d', $d, PDO::PARAM_NULL); +$sth->bindValue(':e', $e, PDO::PARAM_LOB); +$sth->bindValue(':f', $f, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT); + +$sth->debugDumpParams(); +unset($dbh); +?> +--EXPECTF-- +SQL: [74] SELECT * FROM test WHERE a=:a AND b=:b AND c=:c AND d=:d AND e=:e AND f=:f +Params: 6 +Key: Name: [2] :a +paramno=%s +name=[2] ":a" +is_param=1 +param_type=1 +is_input_output=0 +param_value=150 +Key: Name: [2] :b +paramno=%s +name=[2] ":b" +is_param=1 +param_type=2 +is_input_output=0 +param_value=red +Key: Name: [2] :c +paramno=%s +name=[2] ":c" +is_param=1 +param_type=5 +is_input_output=0 +param_value=true +Key: Name: [2] :d +paramno=%s +name=[2] ":d" +is_param=1 +param_type=0 +is_input_output=0 +param_value=null +Key: Name: [2] :e +paramno=%s +name=[2] ":e" +is_param=1 +param_type=3 +is_input_output=0 +param_value=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +Key: Name: [2] :f +paramno=%s +name=[2] ":f" +is_param=1 +param_type=2 +is_input_output=1 +param_value=1978-10-17 + |