有没有办法记录 SQLite 查询?

Ami*_*mit 7 php 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();
Run Code Online (Sandbox Code Playgroud)

使用准备好的语句时有没有办法记录查询?

编辑:
如果无法从 SQLite3 准备好的语句中提取查询,您建议采取什么策略来调试查询?

Luk*_*uke 4

您可以扩展SQLite3类并SQLite3Stmt通过重写prepare方法来包装对象。在您的包装器中实现bindValueexecute方法并在对象上调用它们SQLite3Stmt(在此处添加日志记录)。要完成它,您可以为您没有拦截的任何方法/属性添加魔法 __get和函数。__call

为此,您必须将“new SQLite3”更改为“new SQLite3Debug”(假设您的扩展类被称为此)。