summaryrefslogtreecommitdiff
path: root/ext/pdo
diff options
context:
space:
mode:
authorBishop Bettini <bishop@php.net>2016-06-21 08:16:51 -0400
committerJulien Pauli <jpauli@php.net>2016-09-02 17:02:39 +0200
commit04115b4e3f37f24bdefb853c5c31eebd40ffff64 (patch)
tree1e3f6dffcb834e3d1ee5b8fe37b801a764011506 /ext/pdo
parent3a53194da914c4796358556400dc34370b2cb14b (diff)
downloadphp-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.c36
-rw-r--r--ext/pdo/tests/bug_52384.phpt84
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
+