PDOStatement::debugDumpParams

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.9.0)

PDOStatement::debugDumpParams Dump an SQL prepared command

Descrição

public PDOStatement::debugDumpParams(): ?bool

Dumps the information contained by a prepared statement directly on the output. It will provide the SQL query in use, the number of parameters used (Params), the list of parameters with their key name or position, their name, their position in the query (if this is supported by the PDO driver, otherwise, it will be -1), type (param_type) as an integer, and a boolean value is_param.

This is a debug function, which dumps the data directly to the normal output.

Dica

Assim como qualquer coisa que envia seu resultado diretamente para o navegador, as funções de controle de saída podem ser usadas para capturar a saída desta função e salvá-la em uma string, por exemplo.

This will only dump the parameters in the statement at the moment of the dump. Extra parameters are not stored in the statement, and not displayed.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Returns null, or false in case of an error.

Registro de Alterações

Versão Descrição
7.2.0 PDOStatement::debugDumpParams() now returns the SQL sent to the database, including the full, raw query (including the replaced placeholders with their bounded values). Note, that this will only be available if emulated prepared statements are turned on.

Exemplos

Exemplo #1 PDOStatement::debugDumpParams() example with named parameters

<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour'
);
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindValue(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();

$sth->debugDumpParams();

?>

O exemplo acima produzirá:

SQL: [96] SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour
Params:  2
Key: Name: [9] :calories
paramno=-1
name=[9] ":calories"
is_param=1
param_type=1
Key: Name: [7] :colour
paramno=-1
name=[7] ":colour"
is_param=1
param_type=2

Exemplo #2 PDOStatement::debugDumpParams() example with unnamed parameters

<?php

/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$name = 'apple';

$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < ? AND colour = ?'
);
$sth->bindParam(1, $calories, PDO::PARAM_INT);
$sth->bindValue(2, $colour, PDO::PARAM_STR);
$sth->execute();

$sth->debugDumpParams();

?>

O exemplo acima produzirá:

SQL: [82] SELECT name, colour, calories
    FROM fruit
    WHERE calories < ? AND colour = ?
Params:  2
Key: Position #0:
paramno=0
name=[0] ""
is_param=1
param_type=1
Key: Position #1:
paramno=1
name=[0] ""
is_param=1
param_type=2

Veja Também

add a note add a note

User Contributed Notes 3 notes

up
67
thefox
11 years ago
This function doesn't print parameter values despite the documentation says it does. See https://bugs.php.net/bug.php?id=52384 (filed back in 2010).
up
25
mark at manngo dot net
11 years ago
As noted, this doesn’t actually simply print the prepared statement with data to be executed.

For trouble shooting purposes, I find the following useful:

<?php
   
function parms($string,$data) {
       
$indexed=$data==array_values($data);
        foreach(
$data as $k=>$v) {
            if(
is_string($v)) $v="'$v'";
            if(
$indexed) $string=preg_replace('/\?/',$v,$string,1);
            else
$string=str_replace(":$k",$v,$string);
        }
        return
$string;
    }

   
//    Index Parameters
       
$string='INSERT INTO stuff(name,value) VALUES (?,?)';
       
$data=array('Fred',23);

   
//    Named Parameters
       
$string='INSERT INTO stuff(name,value) VALUES (:name,:value)';
       
$data=array('name'=>'Fred','value'=>23);

    print
parms($string,$data);
?>
up
7
Lucas
9 years ago
This function doesn't have a return, so if you want to do something with it you'll have to do something like

<?php
function pdo_debugStrParams($stmt) {
 
ob_start();
 
$stmt->debugDumpParams();
 
$r = ob_get_contents();
 
ob_end_clean();
  return
$r;
}

// omitted: connect to the database and prepare a statement
echo '<pre>'.htmlspecialchars(pdo_debugStrParams($stmt)).'</pre>';
?

Source: http://stackoverflow.com/questions/22157331/something-like-debugdumpparams-in-pdo-settable-to-a-string
To Top