2013-02-12 57 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