【问题标题】:How can I view a prepared PDO SQL Statement [duplicate]如何查看准备好的 PDO SQL 语句 [重复]
【发布时间】: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();

【问题讨论】:

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

标签: php mysql sql pdo


【解决方案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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-26
        • 2013-12-28
        • 1970-01-01
        • 2011-01-15
        • 2015-08-25
        • 2012-10-05
        相关资源
        最近更新 更多