Skip to content

Commit 04115b4

Browse files
bishopbJulien Pauli
authored and
Julien Pauli
committed
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
1 parent 3a53194 commit 04115b4

File tree

2 files changed

+114
-6
lines changed

2 files changed

+114
-6
lines changed

ext/pdo/pdo_stmt.c

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2122,12 +2122,36 @@ static PHP_METHOD(PDOStatement, debugDumpParams)
21222122
php_stream_printf(out, "Key: Position #" ZEND_ULONG_FMT ":\n", num);
21232123
}
21242124

2125-
php_stream_printf(out, "paramno=%pd\nname=[%zd] \"%.*s\"\nis_param=%d\nparam_type=%d\n",
2126-
param->paramno, param->name ? ZSTR_LEN(param->name) : 0, param->name ? (int) ZSTR_LEN(param->name) : 0,
2127-
param->name ? ZSTR_VAL(param->name) : "",
2128-
param->is_param,
2129-
param->param_type);
2130-
2125+
php_stream_printf(out TSRMLS_CC, "paramno=%ld\nname=[%d] \"%.*s\"\nis_param=%d\nparam_type=%d\nis_input_output=%d\n",
2126+
param->paramno, param->namelen, param->namelen, param->name ? param->name : "",
2127+
param->is_param,
2128+
PDO_PARAM_TYPE(param->param_type),
2129+
(param->param_type & PDO_PARAM_INPUT_OUTPUT) == PDO_PARAM_INPUT_OUTPUT);
2130+
2131+
/*
2132+
* Check the type of the parameter and print out the value.
2133+
*
2134+
* Most are self explanatory with the following exceptions:
2135+
* PDO::PARAM_INT evaluates to a long
2136+
* PDO::PARAM_LOB evaluates to a string
2137+
*/
2138+
switch (Z_TYPE_P(param->parameter)) {
2139+
case IS_BOOL:
2140+
php_stream_printf(out TSRMLS_CC, "param_value=%s\n", Z_BVAL_P(param->parameter)?"true":"false");
2141+
break;
2142+
case IS_NULL:
2143+
php_stream_printf(out TSRMLS_CC, "param_value=null\n");
2144+
break;
2145+
case IS_LONG:
2146+
php_stream_printf(out TSRMLS_CC, "param_value=%ld\n", Z_LVAL_P(param->parameter));
2147+
break;
2148+
case IS_STRING:
2149+
php_stream_printf(out TSRMLS_CC, "param_value=%s\n", Z_STRVAL_P(param->parameter));
2150+
break;
2151+
default:
2152+
php_stream_printf(out TSRMLS_CC, "param_value=unknown\n");
2153+
break;
2154+
}
21312155
} ZEND_HASH_FOREACH_END();
21322156
}
21332157

ext/pdo/tests/bug_52384.phpt

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
--TEST--
2+
PDO Common: Bug #52384 (debugDumpParams does not emit the bind parameter value)
3+
--SKIPIF--
4+
<?php # vim:ft=php
5+
# 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
6+
if (!extension_loaded('pdo')) die('skip');
7+
$dir = getenv('REDIR_TEST_DIR');
8+
if (false == $dir) die('skip no driver');
9+
require_once $dir . 'pdo_test.inc';
10+
PDOTest::skip();
11+
?>
12+
--FILE--
13+
<?php
14+
if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.dirname(__FILE__) . '/../../pdo/tests/');
15+
require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
16+
$db = PDOTest::factory();
17+
18+
$a = 150;
19+
$b = 'red';
20+
$c = true;
21+
$d = null;
22+
$e = str_repeat('a',1000);
23+
$f = '1978-10-17';
24+
25+
$db->exec("CREATE TABLE test (a INT, b VARCHAR(10), c INT, d INT, e TEXT, f VARCHAR(10))");
26+
$sth = $db->prepare(
27+
'SELECT * FROM test WHERE a=:a AND b=:b AND c=:c AND d=:d AND e=:e AND f=:f'
28+
);
29+
$sth->bindParam(':a', $a, PDO::PARAM_INT);
30+
$sth->bindValue(':b', $b, PDO::PARAM_STR);
31+
$sth->bindValue(':c', $c, PDO::PARAM_BOOL);
32+
$sth->bindValue(':d', $d, PDO::PARAM_NULL);
33+
$sth->bindValue(':e', $e, PDO::PARAM_LOB);
34+
$sth->bindValue(':f', $f, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT);
35+
36+
$sth->debugDumpParams();
37+
unset($dbh);
38+
?>
39+
--EXPECTF--
40+
SQL: [74] SELECT * FROM test WHERE a=:a AND b=:b AND c=:c AND d=:d AND e=:e AND f=:f
41+
Params: 6
42+
Key: Name: [2] :a
43+
paramno=%s
44+
name=[2] ":a"
45+
is_param=1
46+
param_type=1
47+
is_input_output=0
48+
param_value=150
49+
Key: Name: [2] :b
50+
paramno=%s
51+
name=[2] ":b"
52+
is_param=1
53+
param_type=2
54+
is_input_output=0
55+
param_value=red
56+
Key: Name: [2] :c
57+
paramno=%s
58+
name=[2] ":c"
59+
is_param=1
60+
param_type=5
61+
is_input_output=0
62+
param_value=true
63+
Key: Name: [2] :d
64+
paramno=%s
65+
name=[2] ":d"
66+
is_param=1
67+
param_type=0
68+
is_input_output=0
69+
param_value=null
70+
Key: Name: [2] :e
71+
paramno=%s
72+
name=[2] ":e"
73+
is_param=1
74+
param_type=3
75+
is_input_output=0
76+
param_value=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
77+
Key: Name: [2] :f
78+
paramno=%s
79+
name=[2] ":f"
80+
is_param=1
81+
param_type=2
82+
is_input_output=1
83+
param_value=1978-10-17
84+

0 commit comments

Comments
 (0)