PDOStatement::debugDumpParams

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

PDOStatement::debugDumpParams Вывод информации о подготовленной SQL команде в целях отладки

Описание

bool PDOStatement::debugDumpParams ( void )

Выводит информацию о подготовленном запросе в выходной поток. Будет выводиться текст используемого SQL запроса, количество задействованных параметров (Params), список параметров с их именами, типами (paramtype) в виде целых чисел, ключевых имен или позиций, их значений и позиций в запросе (если эта возможность поддерживается драйвером, в противном случае позиции будут равны -1).

Это отладочная функция, которая направляет данные на стандартный вывод.

Подсказка

Как и с любой другой функцией, осуществляющей вывод непосредственно в браузер, вы можете использовать функции контроля вывода, чтобы перехватывать выводимые этой функцией данные и сохранять их, например, в string.

Эта функция выведет информацию о параметрах запроса, существующих на момент вызова. Дополнительные параметры не хранятся в запросе, поэтому отображены не будут.

Возвращаемые значения

Эта функция не возвращает значения после выполнения.

Примеры

Пример #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'$caloriesPDO::PARAM_INT);
$sth->bindValue(':colour'$colourPDO::PARAM_STR12);
$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$caloriesPDO::PARAM_INT);
$sth->bindValue(2$colourPDO::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

Смотрите также

  • PDO::prepare() - Подготавливает запрос к выполнению и возвращает ассоциированный с этим запросом объект
  • PDOStatement::bindParam() - Привязывает параметр запроса к переменной
  • PDOStatement::bindValue() - Связывает параметр с заданным значением

Коментарии

Автор:
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).
2013-04-16 08:58:12
http://php5.kiev.ua/manual/ru/pdostatement.debugdumpparams.html
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);
?>
2013-10-07 04:21:24
http://php5.kiev.ua/manual/ru/pdostatement.debugdumpparams.html
Автор:
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>';
?

Sourcehttp://stackoverflow.com/questions/22157331/something-like-debugdumpparams-in-pdo-settable-to-a-string
2015-12-15 16:15:55
http://php5.kiev.ua/manual/ru/pdostatement.debugdumpparams.html
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
2024-12-06 21:41:52
http://php5.kiev.ua/manual/ru/pdostatement.debugdumpparams.html

    Поддержать сайт на родительском проекте КГБ