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).(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.9.0)
PDOStatement::debugDumpParams â DĂ©taille une commande prĂ©parĂ©e SQL
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.
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.
Cette fonction ne contient aucun paramĂštre.
| 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. |
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
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).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);
?>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-stringUsing 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