2012-03-09 163 views
4

我使用準備好的語句,如:有沒有辦法記錄SQLite查詢?

$mysqlite = new SQLite3("test.sqlite", SQLITE3_OPEN_READWRITE); 
$stmnt = $mysqlite->prepare("INSERT INTO Friends VALUES(?,?,?)"); 
$stmnt->bindValue(1,4,SQLITE3_INTEGER); 
$stmnt->bindValue(2,"Jane",SQLITE3_TEXT); 
$stmnt->bindValue(3,"F",SQLITE3_TEXT); 
$stmnt->execute(); 

是否有使用預處理語句時,日誌查詢方式?

編輯:
如果無法從SQLite3預準備語句中提取查詢,您會建議如何調試查詢?

+1

如果您試圖用數據記錄聲明,我認爲您會感到失望。 – Brad 2012-03-09 04:46:40

+0

布拉德是正確的 - 文檔http://www.php.net/manual/en/class.sqlite3stmt.php顯示沒有方法preparestatement返回最終查詢日誌。 – 2012-03-10 09:10:25

+0

Brad,msgmash.com:對於調試/日誌記錄查詢,您會採用哪種替代策略? – Amit 2012-03-10 16:54:09

回答

3

您可以擴展SQLite3類,並通過覆蓋prepare方法來包裝SQLite3Stmt對象。在你的包裝中實現bindValueexecute方法,並在SQLite3Stmt對象上調用它們(在此處添加日誌記錄)。要完成它,你可以添加magic__get__call函數用於你沒有攔截的任何方法/屬性。

爲此,您必須將「新SQLite3」更改爲「新SQLite3Debug」(假設您的擴展類被稱爲此)。

相關問題