PHP Conference Fukuoka 2025

PDOStatement::debugDumpParams

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

PDOStatement::debugDumpParams Detalla una instrucción SQL preparada

Descripción

public PDOStatement::debugDumpParams(): ?bool

Detalla la información contenida en una instrucción preparada, directamente en la salida estándar. La información incluye la consulta SQL utilizada, el número de parámetros usados (Params), la lista de parámetros, con el nombre de clave o su posición, su nombre, su posición en la consulta (si esta última información no es soportada por el controlador PDO, es siempre -1), un tipo (param_type) en forma de entero, y un valor booleano is_param.

Esta es una función de depuración, que muestra directamente información en la salida estándar.

Sugerencia

Al igual que con todas las funciones que muestran directamente resultados al navegador, las funciones de gestión de salida pueden ser utilizadas para capturar la salida de esta función y almacenarla en un string (por ejemplo).

Los parámetros mostrados son aquellos que han sido añadidos en la consulta hasta el momento de la llamada. Los parámetros adicionales son ignorados.

Parámetros

Esta función no contiene ningún parámetro.

Valores devueltos

Devuelve null, o false en caso de error.

Historial de cambios

Versión Descripción
7.2.0 PDOStatement::debugDumpParams() ahora devuelve el SQL enviado a la base de datos, incluyendo la consulta completa, RAW (incluyendo los marcadores de posición reemplazados con sus valores delimitados). Tenga en cuenta que esto solo estará disponible si las instrucciones preparadas emuladas están activadas.

Ejemplos

Ejemplo #1 Ejemplo con PDOStatement::debugDumpParams() y parámetros nombrados

<?php
/* ejecución de una instrucción preparada con enlace a variables PHP */
$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();

?>

El ejemplo anterior mostrará :

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

Ejemplo #2 Ejemplo con PDOStatement::debugDumpParams() y parámetros anónimos

<?php

/* ejecución de una instrucción preparada con enlace a variables PHP */
$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();

?>

El ejemplo anterior mostrará :

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

Ver también

add a note

User Contributed Notes 4 notes

up
70
thefox
12 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
29
mark at manngo dot net
12 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
16
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<?phpfunction pdo_debugStrParams($stmt) {  ob_start();  $stmt->debugDumpParams();  $r = ob_get_contents();  ob_end_clean();  return $r;}// omitted: connect to the database and prepare a statementecho '<pre>'.htmlspecialchars(pdo_debugStrParams($stmt)).'</pre>';?Source: http://stackoverflow.com/questions/22157331/something-like-debugdumpparams-in-pdo-settable-to-a-string
up
1
wchasroth at gmail dot com
10 months ago
Using PHP 8.3 and MySQL 8.2, debugDumpParams() DOES display the "raw" SQL, with parameter values.E.g. $sql = "SELECT tid, miv_title, ballot_order FROM title WHERE tid LIKE :tid AND ballot_order = :order";$stm = $pdo->prepare($sql);$stm->bindValue(":tid",   "mi:%");$stm->bindValue(":order", 5000, PDO::PARAM_INT);$stm->execute();$stm->debugDumpParams();... displays ...SQL: [92] SELECT tid, miv_title, ballot_order FROM title WHERE tid LIKE :tid AND ballot_order = :orderSent SQL: [92] SELECT tid, miv_title, ballot_order FROM title WHERE tid LIKE 'mi:%' AND ballot_order = 5000Params:  2Key: Name: [4] :tidparamno=-1name=[4] ":tid"is_param=1param_type=2Key: Name: [6] :orderparamno=-1name=[6] ":order"is_param=1param_type=1
To Top