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 — Вывод информации о подготовленной SQL-команде в целях отладки
Выводит информацию о подготовленном запросе в выходной поток. Будет выводиться
текст используемого SQL
запроса, количество задействованных
параметров (Params
), список параметров с их именами ключей или
индексами, их именами, индексами в запросе (если поддерживается в драйвере PDO, иначе
-1), типом (param_type
) в виде целого числа и логическое значение
is_param
.
Это отладочная функция, которая направляет данные на стандартный вывод.
Как и всё, что выводит результат в браузер, функции контроля вывода можно вызывать, чтобы перехватить выводимые этой функцией данные и сохранять их, например в строку (string).
Эта функция выведет информацию о параметрах запроса, существующих на момент вызова. Дополнительные параметры не хранятся в запросе, поэтому отображены не будут.
У этой функции нет параметров.
Версия | Описание |
---|---|
7.2.0 | PDOStatement::debugDumpParams() теперь возвращает SQL, отправленный в базу данных, в том числе полный необработанный запрос (включая заменённые параметры с их связанными значениями). Обратите внимание, что это будет работать только при включённой эмуляции подготавливаемых запросов. |
Пример #1 Пример использования PDOStatement::debugDumpParams() с именованными параметрами
<?php
/* Выполнение запроса с привязкой 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();
?>
Результат выполнения приведённого примера:
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
Пример #2 Пример использования PDOStatement::debugDumpParams() с неименованными (?) параметрами
<?php
/* Выполнение запроса с привязкой 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();
?>
Результат выполнения приведённого примера:
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<?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
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