mirror of
https://github.com/php/php-src.git
synced 2026-04-18 05:21:02 +02:00
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
This commit is contained in:
@@ -2120,6 +2120,7 @@ static PHP_METHOD(PDOStatement, debugDumpParams)
|
||||
if (stmt->bound_params) {
|
||||
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",
|
||||
@@ -2128,11 +2129,45 @@ static PHP_METHOD(PDOStatement, debugDumpParams)
|
||||
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, "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
|
||||
*/
|
||||
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, "param_value=null\n");
|
||||
break;
|
||||
case IS_LONG:
|
||||
php_stream_printf(out, "param_value=%ld\n", Z_LVAL(parameter));
|
||||
break;
|
||||
case IS_STRING:
|
||||
php_stream_printf(out, "param_value=%s\n", Z_STRVAL(parameter));
|
||||
break;
|
||||
default:
|
||||
php_stream_printf(out, "param_value=unknown\n");
|
||||
break;
|
||||
}
|
||||
|
||||
} ZEND_HASH_FOREACH_END();
|
||||
}
|
||||
|
||||
81
ext/pdo/tests/bug_52384.phpt
Normal file
81
ext/pdo/tests/bug_52384.phpt
Normal file
@@ -0,0 +1,81 @@
|
||||
--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/pdo_038.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();
|
||||
|
||||
$calories = 150;
|
||||
$colour = 'red';
|
||||
$tf = true;
|
||||
$n = null;
|
||||
$lob = str_repeat('a',1000);
|
||||
$dob = '1978-10-17';
|
||||
|
||||
$sth = $db->prepare('SELECT 1 WHERE 1');
|
||||
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
|
||||
$sth->bindValue(':colour', $colour, PDO::PARAM_STR);
|
||||
$sth->bindValue(':tf', $tf, PDO::PARAM_BOOL);
|
||||
$sth->bindValue(':n', $n, PDO::PARAM_NULL);
|
||||
$sth->bindValue(':lob', $lob, PDO::PARAM_LOB);
|
||||
$sth->bindValue(':dob', $dob, PDO::PARAM_STR|PDO::PARAM_INPUT_OUTPUT);
|
||||
|
||||
$sth->debugDumpParams();
|
||||
unset($dbh);
|
||||
?>
|
||||
--EXPECT--
|
||||
SQL: [16] SELECT 1 WHERE 1
|
||||
Params: 6
|
||||
Key: Name: [9] :calories
|
||||
paramno=-1
|
||||
name=[9] ":calories"
|
||||
is_param=1
|
||||
param_type=1
|
||||
is_input_output=0
|
||||
param_value=150
|
||||
Key: Name: [7] :colour
|
||||
paramno=-1
|
||||
name=[7] ":colour"
|
||||
is_param=1
|
||||
param_type=2
|
||||
is_input_output=0
|
||||
param_value=red
|
||||
Key: Name: [3] :tf
|
||||
paramno=-1
|
||||
name=[3] ":tf"
|
||||
is_param=1
|
||||
param_type=5
|
||||
is_input_output=0
|
||||
param_value=true
|
||||
Key: Name: [2] :n
|
||||
paramno=-1
|
||||
name=[2] ":n"
|
||||
is_param=1
|
||||
param_type=0
|
||||
is_input_output=0
|
||||
param_value=null
|
||||
Key: Name: [4] :lob
|
||||
paramno=-1
|
||||
name=[4] ":lob"
|
||||
is_param=1
|
||||
param_type=3
|
||||
is_input_output=0
|
||||
param_value=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
Key: Name: [4] :dob
|
||||
paramno=-1
|
||||
name=[4] ":dob"
|
||||
is_param=1
|
||||
param_type=2
|
||||
is_input_output=1
|
||||
param_value=1978-10-17
|
||||
|
||||
Reference in New Issue
Block a user