Skip to content

Commit 15336b4

Browse files
bishopbJulien Pauli
authored andcommitted
Fixes #52384: Adds parameter value to dumped output. Also adds output flag indicating presence of PDO::PARAM_INPUT_OUTPUT.
1 parent 403f23b commit 15336b4

File tree

2 files changed

+109
-2
lines changed

2 files changed

+109
-2
lines changed

ext/pdo/pdo_stmt.c

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2159,10 +2159,36 @@ static PHP_METHOD(PDOStatement, debugDumpParams)
21592159
php_stream_printf(out TSRMLS_CC, "Key: Name: [%d] %.*s\n", len, len, str);
21602160
}
21612161

2162-
php_stream_printf(out TSRMLS_CC, "paramno=%ld\nname=[%d] \"%.*s\"\nis_param=%d\nparam_type=%d\n",
2162+
php_stream_printf(out TSRMLS_CC, "paramno=%ld\nname=[%d] \"%.*s\"\nis_param=%d\nparam_type=%d\nis_input_output=%d\n",
21632163
param->paramno, param->namelen, param->namelen, param->name ? param->name : "",
21642164
param->is_param,
2165-
param->param_type);
2165+
PDO_PARAM_TYPE(param->param_type),
2166+
(param->param_type & PDO_PARAM_INPUT_OUTPUT) == PDO_PARAM_INPUT_OUTPUT);
2167+
2168+
/*
2169+
* Check the type of the parameter and print out the value.
2170+
*
2171+
* Most are self explanatory with the following exceptions:
2172+
* PDO::PARAM_INT evaluates to a long
2173+
* PDO::PARAM_LOB evaluates to a string
2174+
*/
2175+
switch (Z_TYPE_P(param->parameter)) {
2176+
case IS_BOOL:
2177+
php_stream_printf(out TSRMLS_CC, "param_value=%s\n", Z_BVAL_P(param->parameter)?"true":"false");
2178+
break;
2179+
case IS_NULL:
2180+
php_stream_printf(out TSRMLS_CC, "param_value=null\n");
2181+
break;
2182+
case IS_LONG:
2183+
php_stream_printf(out TSRMLS_CC, "param_value=%ld\n", Z_LVAL_P(param->parameter));
2184+
break;
2185+
case IS_STRING:
2186+
php_stream_printf(out TSRMLS_CC, "param_value=%s\n", Z_STRVAL_P(param->parameter));
2187+
break;
2188+
default:
2189+
php_stream_printf(out TSRMLS_CC, "param_value=unknown\n");
2190+
break;
2191+
}
21662192

21672193
zend_hash_move_forward_ex(stmt->bound_params, &pos);
21682194
}

ext/pdo/tests/bug_52384.phpt

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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/pdo_038.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+
$calories = 150;
19+
$colour = 'red';
20+
$tf = true;
21+
$n = null;
22+
$lob = str_repeat('a',1000);
23+
$dob = '1978-10-17';
24+
25+
$sth = $db->prepare('SELECT 1 WHERE 1');
26+
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
27+
$sth->bindValue(':colour', $colour, PDO::PARAM_STR);
28+
$sth->bindValue(':tf', $tf, PDO::PARAM_BOOL);
29+
$sth->bindValue(':n', $n, PDO::PARAM_NULL);
30+
$sth->bindValue(':lob', $lob, PDO::PARAM_LOB);
31+
$sth->bindValue(':dob', $dob, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT);
32+
33+
$sth->debugDumpParams();
34+
unset($dbh);
35+
?>
36+
--EXPECT--
37+
SQL: [16] SELECT 1 WHERE 1
38+
Params: 6
39+
Key: Name: [9] :calories
40+
paramno=-1
41+
name=[9] ":calories"
42+
is_param=1
43+
param_type=1
44+
is_input_output=0
45+
param_value=150
46+
Key: Name: [7] :colour
47+
paramno=-1
48+
name=[7] ":colour"
49+
is_param=1
50+
param_type=2
51+
is_input_output=0
52+
param_value=red
53+
Key: Name: [3] :tf
54+
paramno=-1
55+
name=[3] ":tf"
56+
is_param=1
57+
param_type=5
58+
is_input_output=0
59+
param_value=true
60+
Key: Name: [2] :n
61+
paramno=-1
62+
name=[2] ":n"
63+
is_param=1
64+
param_type=0
65+
is_input_output=0
66+
param_value=null
67+
Key: Name: [4] :lob
68+
paramno=-1
69+
name=[4] ":lob"
70+
is_param=1
71+
param_type=3
72+
is_input_output=0
73+
param_value=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
74+
Key: Name: [4] :dob
75+
paramno=-1
76+
name=[4] ":dob"
77+
is_param=1
78+
param_type=2
79+
is_input_output=1
80+
param_value=1978-10-17
81+

0 commit comments

Comments
 (0)