【问题标题】:Capturing SQL notices from Propel ORM从 Propel ORM 捕获 SQL 通知
【发布时间】:2013-02-12 03:49:51
【问题描述】:

我有一个大型 SQL 函数,我想通过 PHP/Propel 使用如下准备好的语句在 PostgreSQL 数据库上执行:

$sql = "lots of SQL statements";
$statement = $propelPDO->prepare($sql);
$statement->execute();

在我尝试执行的 SQL 语句中,有许多调用“引发信息...”和“引发警告...”,显示调试信息。从命令行执行 SQL,我可以看到有助于调试 SQL 的提示:

psql -h hostname database username < lots_of_sql_statements.sql

我的问题:有什么方法可以从 PHP 中捕获 SQL 中引发的信息和警告通知,以便我可以记录它们以供以后分析?我在很多不同的记录上运行 SQL,如果能够记录通知而不需要单独进入命令行来查看调试信息,那就太好了。

【问题讨论】:

    标签: php sql postgresql propel


    【解决方案1】:

    如果您使用实际的 Propel 对象,您可以通过捕获 PropelException 来捕获消息

    try {
        $propelObject
            ->setSomething('foo')
            ->save()
        ;
    } catch (PropelException $pe) {
        someLoggingFunction($pe->getMessage());
    }
    

    否则,您将仅限于 PDO 错误处理功能:

    http://www.php.net/manual/en/pdo.error-handling.php

    【讨论】:

    • 我不知道这些 raise inforais warning 是否会抛出异常,因为它们不会阻塞 sql 语句。
    • 这可能是最好的答案,所以我已将其标记为接受。尽管如此,PDO 并没有提供在执行 SQL 时获取此信息的方法,这令人非常失望。对于任何有兴趣的人,我发现了一个在 PHP 中实现这种行为的 RFC 计划(我收集这意味着它还没有完成)。不鼓励 RFC 是在 2009 年编写的……wiki.php.net/rfc/pdonotices
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2016-12-14
    • 1970-01-01
    相关资源
    最近更新 更多