【问题标题】:PHP Print all queries sent to MSSQLPHP 打印发送到 MSSQL 的所有查询
【发布时间】:2016-05-01 13:13:25
【问题描述】:

我将PDOsqlsrv 驱动程序一起使用。我想打印出通过__construct 中初始化的连接传递的所有查询。

我的设置如下;

public function __construct() {
    try{
        $this->connRead     = new PDO( "sqlsrv:server=" . DB_SERVER . "; Database =" . DB_NAME, DB_USER_READ, DB_PASSWORD_READ);
        $this->connRead->setAttribute(  PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    }catch(PDOException $e){ echo 'Connection failed: ' . $e->getMessage(); }
}
public function __destruct() { $this->connRead = null; $this->connWrite= null; }

然后我会提出这样的请求/呼叫;

$sSQL = "SELECT foo FROM Table"
$st = $this->connRead->prepare( $sSQL );
$st->execute();

在加载页面时,我希望能够以纯文本形式将所有使用 $this->connRead 的查询打印到浏览器。可以这样做吗?

【问题讨论】:

标签: php mysql sql pdo


【解决方案1】:

您可以使用:debugDumpParams,这就是 PDO 可以为您提供的全部内容。
您将收到此语句的语句和变量。
此外,您只能针对特定语句而不是连接接收此信息。
而且没有办法接收清晰的 SQL,你只能接收类似的东西:

SELECT :date AS `date`

如果您的声明文本太长 - 它将被截断,see

但所有现代框架都支持它......

【讨论】:

  • 感谢您对debugDumpParams 的引用将派上用场。可惜没有什么可以收集发送的查询:(
【解决方案2】:

我发现的解决方案是创建一个类 (DataHandler) 来处理任何数据库调用。它使用调用类或页面中的连接字符串进行初始化。

然后可以这样执行查询; $oDH->RunCommand($sSQL, [params])

因为所有查询都是通过DataHandler 发送的,所以我可以记录我选择的任何内容。即执行时间、所有查询在页面上运行、绑定参数等。

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多