PDOStatement::debugDumpParams

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

PDOStatement::debugDumpParams 转储 SQL 预备命令

描述

public PDOStatement::debugDumpParams(): ?bool

将预备语句中包含的信息直接转储到输出。它将提供正在使用的 SQL 查询、使用的参数数量 (Params)、参数列表及其键名或位置、其名称、其在查询中的位置(如果 PDO 驱动程序支持,否则将为 -1)、类型 (param_type) 作为整数,以及布尔值 is_param

这是一个调试函数,它将数据直接转储到标准输出。

提示

与任何直接将结果输出到浏览器的操作一样,可以使用 输出控制函数 来捕获此函数的输出,并将其保存到 string(例如)中。

这只会转储转储时语句中的参数。不会在语句中存储额外的参数,也不会显示它们。

参数

此函数没有参数。

返回值

在发生错误的情况下,返回 nullfalse

变更日志

版本 描述
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

参见

添加注释

用户贡献的注释 3 个注释

thefox
11 年前
此函数尽管文档中说会打印参数值,但实际上并没有。请参见 https://bugs.php.net/bug.php?id=52384(于 2010 年提交)。
mark at manngo dot net
10 年前
如前所述,它实际上并没有简单地打印要执行的预备语句及其数据。

出于故障排除的目的,我发现以下内容很有用

<?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;
}

// 索引参数
$string='INSERT INTO stuff(name,value) VALUES (?,?)';
$data=array('Fred',23);

// 命名参数
$string='INSERT INTO stuff(name,value) VALUES (:name,:value)';
$data=array('name'=>'Fred','value'=>23);

print
parms($string,$data);
?>
Lucas
8 年前
此函数没有返回值,因此如果您想使用它,则需要执行类似以下操作

<?php
function pdo_debugStrParams($stmt) {
ob_start();
$stmt->debugDumpParams();
$r = ob_get_contents();
ob_end_clean();
return
$r;
}

// 省略:连接数据库并准备语句
echo '<pre>'.htmlspecialchars(pdo_debugStrParams($stmt)).'</pre>';
?

来源: http://stackoverflow.com/questions/22157331/something-like-debugdumpparams-in-pdo-settable-to-a-string
To Top