PDOStatement::debugDumpParams

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

PDOStatement::debugDumpParams — DĂ©taille une commande prĂ©parĂ©e SQL

Description

public function PDOStatement::debugDumpParams(): ?bool

DĂ©taille les informations contenues dans une commande prĂ©parĂ©e, directement sur la sortie standard. Les informations sont notamment la requĂȘte SQL utilisĂ©e, le nombre de paramĂštres utilisĂ©s (Params), la liste des paramĂštres, avec le nom de clĂ© ou leur position, leur nom, leur position dans la requĂȘte (si cette derniĂšre information n'est pas supportĂ©e par le pilote PDO, c'est toujours -1), un type (param_type) sous forme d'entier, et une valeur boolĂ©enne is_param.

Ceci est une fonction de débogage, qui affiche directement des informations sur la sortie standard.

Astuce

Comme pour toutes les fonctions qui affichent directement des rĂ©sultats au navigateur, les fonctions de gestion des sorties peuvent ĂȘtre utilisĂ©es pour capturer la sortie de cette fonction et l'enregistrer dans une chaĂźne de caractĂšres (par exemple).

Les paramĂštres affichĂ©s sont ceux qui ont Ă©tĂ© ajoutĂ©s dans la requĂȘte jusqu'au moment de l'appel. Les paramĂštres surnumĂ©raires sont ignorĂ©s.

Liste de paramĂštres

Cette fonction ne contient aucun paramĂštre.

Valeurs de retour

Retourne null, ou false en cas d'erreur.

Historique

Version Description
7.2.0 PDOStatement::debugDumpParams() retourne maintenant le SQL envoyĂ© Ă  la base de donnĂ©es, y compris la requĂȘte complĂšte, RAW (y compris les espaces rĂ©servĂ©s remplacĂ©s avec leurs valeurs dĂ©limitĂ©es). Il est Ă  noter que cela ne sera disponible que si les instructions prĂ©parĂ©es Ă©mulĂ©es sont activĂ©es.

Exemples

Exemple #1 Exemple avec PDOStatement::debugDumpParams() et des paramÚtres nommés

<?php
/* exécution d'une commande préparée avec liaison avec 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();

?>

L'exemple ci-dessus va afficher :

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

Exemple #2 Exemple avec PDOStatement::debugDumpParams() et des paramĂštres anonymes

<?php

/* exécution d'une commande préparée avec liaison avec 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();

?>

L'exemple ci-dessus va afficher :

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

Voir aussi

add a note

User Contributed Notes 4 notes

up
73
thefox ¶
13 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 ¶
10 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
up
1
wchasroth at gmail dot com ¶
1 year 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 = :order
Sent SQL: [92] SELECT tid, miv_title, ballot_order FROM title WHERE tid LIKE 'mi:%' AND ballot_order = 5000
Params:  2
Key: Name: [4] :tid
paramno=-1
name=[4] ":tid"
is_param=1
param_type=2
Key: Name: [6] :order
paramno=-1
name=[6] ":order"
is_param=1
param_type=1