2013-02-12 61 views
3

我有,我想用事先准备好的声明,像这样通过PHP /行走PostgreSQL数据库上执行大量SQL函数:捕获SQL声明

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

在SQL语句我试着要执行,有很多调用“raise info ...”和“raise warning ...”来显示调试信息。在命令行中执行SQL,我可以看到这个通知,这有助于调试SQL:

psql -h hostname database username < lots_of_sql_statements.sql 

我的问题:有什么办法可以捕捉从PHP中的SQL提出的信息和警告提示,让我可以记录它们以供日后分析?我在很多不同的记录上运行SQL,并且能够记录通知而非单独查看命令行以查看调试信息将是非常好的。

回答

5

那么,如果你使用的实际的Propel对象,可以通过捕捉PropelException

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

否则你只是局限于PDO的错误处理功能赶消息:

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

+0

我不t知道这些* raise info *或* rais warning *会抛出一个异常,因为它们不会阻塞sql语句。 – j0k 2013-02-12 08:18:47

+0

这可能是最好的答案,所以我将其标记为已接受。不过,令人失望的是,PDO在执行SQL时没有提供获取这些信息的方法。对于任何感兴趣的人,我发现了一个在PHP中实现这种行为的RFC计划(我收集这意味着它尚未完成)。不鼓励RFC是在2009年编写的... https://wiki.php.net/rfc/pdonotices – 2013-02-14 22:52:33