当 PHP 提交更新时为 C++ 应用程序调用 SQLite 触发器

Posted

技术标签:

【中文标题】当 PHP 提交更新时为 C++ 应用程序调用 SQLite 触发器【英文标题】:Calling a SQLite trigger for C++ application when PHP submits an update 【发布时间】:2014-09-22 11:35:43 【问题描述】:

我有一个由 C++ 应用程序填充的 SQLite 数据库。我还在开发一个 Web 界面,以允许使用 javascriptphp 进行不同的显示。在任何给定时间只会打开一个接口实例,但它将位于网络中的另一台机器上,来自 SQLite 文件和 C++ 应用程序。

我希望能够从界面更新几个字段。我可以创建一个触发器来让 C++ 应用程序知道数据何时发生更改,但如果 PHP 进行了更改,则触发器以该连接为目标并引发错误(因为回调函数是在 C++ 代码中定义的)。我尝试为所涉及的所有内容启用共享缓存连接,但 SQLite 触发器仍然无法跨应用程序。

有没有办法自动通知 C++ 应用程序更改,或者如果我们继续使用 SQLite,我是否必须定期轮询数据库?

我能够找到的所有文档都建议使用后者,但大多数文档要么含糊不清,要么较旧,所以我希望有一个我无法找到的解决方法。

【问题讨论】:

【参考方案1】:

我认为当 PHP 更新 SQLite 数据库时,根本不可能执行自己的 C++ 函数,因为 PHP 正在使用其内部 SQLite 库来更新数据库。

因此,除非您想弄乱 PHP 并使用自定义 SQLite 实现重新编译(我真的不建议这样做),否则您就不走运了。

替代方案:

您可以在磁盘上查看 SQLite 文件本身,如果更新,您可以执行您的程序。但是,文件系统监视守护程序并不能很好地与网络驱动器配合使用。

轮询数据库是最安全的选择 - 始终有效,但可能会很慢,尤其是因为您可能同时从两个程序打开同一个 SQLite 文件。

无论如何,如果您需要从多个地方(PHP 程序和 C++ 程序)访问数据库,则可能是时候使用不同的数据库引擎了。

【讨论】:

SQLite 很好,因为我们可以将程序打包为单个可执行文件。我相信您是完全正确的,但是我将再给它几天时间,看看是否有人发布了解决方法,这样我们就可以避免在我们想要运行应用程序的任何地方安装更重的框架。 @chRaithyn 好的。可以肯定的是:我是否正确理解您希望在 PHP 客户端请求时将 C++ 应用程序作为守护进程运行以进行计算? C++ 应用程序在启动时不断地根据存储在数据库中的值运行计算。此时它再也不会访问这些。我希望能够根据来自 PHP 客户端的用户输入来修改计算。

以上是关于当 PHP 提交更新时为 C++ 应用程序调用 SQLite 触发器的主要内容,如果未能解决你的问题,请参考以下文章

在编辑节点 (C#) 时为 TreeView 提交更改很热?

React native - 如果表单提交时为空,则突出显示 TextInput

使用java对象Deflater对一个String类型压缩,在linux下使用c++调用zlib库inflate解压时为乱码

RPC框架Thrift例子-PHP调用C++后端程序

如何从 PHP 调用 R 脚本?

如何使提交按钮,删除和更新在同一个表单,php