代码之家  ›  专栏  ›  技术社区  ›  atoms

PHP打印发送到MSSQL的所有查询

  •  1
  • atoms  · 技术社区  · 10 年前

    我正在使用 PDO 使用 sqlsrv 驾驶员。我想打印出通过在中初始化的连接传递的所有查询 __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 以纯文本形式发送到浏览器。有可能这样做吗?

    2 回复  |  直到 9 年前
        1
  •  0
  •   Community Mohan Dere    9 年前

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

    SELECT :date AS `date`
    

    如果您的语句文本太长,它将被截断, see .

    但所有现代框架都与之共存。。。

        2
  •  0
  •   atoms    10 年前

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

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

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