如何查看准备好的 PDO SQL 语句 [重复]

Posted

技术标签:

【中文标题】如何查看准备好的 PDO SQL 语句 [重复]【英文标题】:How can I view a prepared PDO SQL Statement [duplicate] 【发布时间】:2012-06-24 18:15:06 【问题描述】:

可能重复:PDO Prepared Statements

我确定这个问题的答案很简单,但我似乎找不到。

我正在使用 PDO(php 数据对象)对 mysql 数据库运行查询,并且发现在对 DB 执行之前显示准备好的查询很有用。

有没有办法做到这一点?例如:

$query = 'SELECT Id, Name, Comment FROM Users WHERE Id = :id';
$pdoStatement = $db->prepare($query);
$pdoStatement->bindValue(':id', $id);

// How can I view the actual statement that will be executed, showing the real
// value that will be used in place of ':id'

$pdoStatement->execute();

【问题讨论】:

这里讨论***.com/questions/2411182/…和***.com/questions/6961897/… 考虑到你们找到其他帖子的速度,我显然搜索得不太好。 @Bryan 这是右侧相关问题面板中的第一个! @lonesomeday 我在 Google 上进行了一些搜索,但没有产生任何有用的信息,然后只是发布了问题而没有检查相关问题。我的错。不过再次感谢。 debugDumpParams 是我猜的答案 【参考方案1】:

您无法获取发送到服务器的查询,因为 PDO 不能以这种方式工作。

将$query和$id分别发送到服务器数据库,由数据库加入后执行。

【讨论】:

【参考方案2】:

一种常见的做法是将查询(其中包含占位符)与绑定值一起打印。当使用:placeholder => value 样式的数组时,您可以只使用var_dumpprint_rvar_export 数组。

例如,这是在 Magento SQL 调试中完成的。

“最终”查询不作为字符串存在,除非 PDO 驱动程序不支持准备好的语句并且它正在模拟它们。

本质上,您可以将准备好的语句视为存储函数或存储过程。您创建一次并使用多个参数多次执行它。

【讨论】:

【参考方案3】:

使用它:

/**
 * Replaces any parameter placeholders in a query with the value of that
 * parameter. Useful for debugging. Assumes anonymous parameters from 
 * $params are are in the same order as specified in $query
 *
 * @param string $query The sql query with parameter placeholders
 * @param array $params The array of substitution parameters
 * @return string The interpolated query
 */
public static function interpolateQuery($query, $params) 
    $keys = array();

    # build a regular expression for each parameter
    foreach ($params as $key => $value) 
        if (is_string($key)) 
            $keys[] = '/:'.$key.'/';
         else 
            $keys[] = '/[?]/';
        
    

    $query = preg_replace($keys, $params, $query, 1, $count);

    #trigger_error('replaced '.$count.' keys');

    return $query;

来源:View and debug prepared PDO query without looking at MySQL logs

【讨论】:

以上是关于如何查看准备好的 PDO SQL 语句 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

PDO 准备好的语句如何帮助防止 SQL 易受攻击的语句?

在查询中使用 PDO 准备好的语句和 LIMIT 时出错 [重复]

PDO - 使用准备好的语句将所有 sql 数据放入 html 表中

PHP PDO准备语句给出“无效语法”错误[重复]

使用 PDO 准备好的语句插入致命错误 [重复]

从 PDO 准备好的语句中获取查询 [重复]