编辑:感谢丹尼尔和丹尼斯。现在问题已经解决了,正如他们委婉地指出的那样,在这种情况下,问题出在程序员身上(特别是没有从头到尾考虑过),我希望我能同时接受这两个答案。
注意:说我是 postgresql 的新手就是侮辱新手!
我正在编写一个 Web 应用程序,它将利用 PostgreSQL 数据库进行数据存储。到目前为止,我已经很好地掌握了创建查询和从中检索结果的语法,无论是查找、删除、插入还是更新。然而,我遇到了一个难题。
为避免 SQL 注入问题,建议使用pg_prepare()/pg_execute()
or pg_query_params
。我使用的pg_prepare()/pg_execute()
比其他的更多。但是每个查询都是一个 4 步的过程,
- 准备查询字符串本身,
- 在数据库上准备查询(使用 pg_prepare)
- 执行查询(pg_execute)
- 处理/操作返回的数据。
因为这是一个 PHP 脚本,所以准备好的查询不会在脚本终止时自动释放,因此需要通过调用手动完成,例如:
pg_query($dbconn, "DEALLOCATE 'query_name';")
但是,DEALLOCATE
SQL 命令不会返回有关成功或失败的有用信息,因此在尝试确定DEALLOCATE
指令的结果时,尝试确定是否:
- 查询成功,释放也成功
- 查询成功,释放失败
- 查询失败,释放也是如此
- 查询失败,释放成功(我不相信这甚至会发生)
我的问题是双重的”
- 如何(除非重复查询服务器关于解除分配的查询)如何确定解除分配是否成功,以及
- 有没有一种简单的方法来确定查询的哪一部分失败(在失败的情况下)解除分配,或查询本身的发送?
这个问题提供了部分解决方案,但对找到错误的来源没有帮助。PHP/PostgreSQL:检查准备好的语句是否已经存在