取消分配准备好的查询

2024-04-09

编辑:我感谢丹尼尔和丹尼斯。问题现在已经解决了,正如他们巧妙地指出的那样,这种情况下的问题是程序员(特别是没有彻底思考)我希望我能接受这两个答案。

注意:说我是 postgresql 新手是在侮辱新手!

我正在编写一个 Web 应用程序,它将利用 PostgreSQL 数据库进行数据存储。到目前为止,我已经很好地掌握了创建查询并从中检索结果的语法,无论是查找、删除、插入还是更新。然而,我遇到了一个困境。

为了避免 SQL 注入问题,使用pg_prepare()/pg_execute() or pg_query_params被推荐。我正在使用更多的pg_prepare()/pg_execute()比我是另一个。但每个查询都是一个 4 步过程,

  1. 准备查询字符串本身,
  2. 在数据库上准备查询(使用 pg_prepare)
  3. 执行查询(pg_execute)
  4. 处理/操纵返回的数据。

因为这是一个 PHP 脚本,所以准备好的查询不会在脚本终止时自动释放,因此需要通过以下调用手动完成:

pg_query($dbconn, "DEALLOCATE 'query_name';")

但是,那DEALLOCATESQL 命令不会返回有关成功或失败的有用信息,因此在尝试确定结果时DEALLOCATE指令,试图确定是否:

  1. 查询成功,释放也成功
  2. 查询成功,释放失败
  3. 查询失败,释放也失败
  4. 查询失败并且释放成功(我不相信这种情况会发生)

我的问题有两个”

  1. 我如何(禁止向服务器重复查询有关已解除分配的查询)确定解除分配是否成功,以及
  2. 有没有一种简单的方法来确定查询的哪一部分失败(如果失败)释放或查询本身的发送?

这个问题提供了部分解决方案,但对查找错误根源没有帮助。PHP/PostgreSQL:检查准备好的语句是否已存在 https://stackoverflow.com/q/1193020/1658512


当释放语句时,返回值pg_query指示成功与否,就像任何“实用程序声明”一样。失败时应该返回 false。例如:

 if (!pg_query($cnx, "deallocate foobar")) {
   echo "Error deallocate: " . pg_last_error($cnx);
 }
 else {
  echo "deallocate successful";
 }

这显示:

错误解除分配:错误:准备好的语句“foobar”不存在

请注意,要释放的语句名称不能用单引号括起来,因为它是标识符,而不是字符串文字。如果由于有问题的字符而需要将其括起来,可以使用pg_escape_identifier http://www.php.net/manual/en/function.pg-escape-identifier.php(php>=5.4.4)

要清理会话,甚至不需要迭代准备好的语句并逐一释放它们,您可以调用DEALLOCATE ALL http://www.postgresql.org/docs/current/static/sql-deallocate.html相反,仍然与pg_query.

还有另一条语句在一个查询中进行更多清理:DISCARD ALL http://www.postgresql.org/docs/current/static/sql-discard.html

另外,如果脚本确实与 postgres 断开连接,则这些都不是必需的,因为准备好的语句对于其父会话而言是本地的,并会随之消失。

当在脚本之间使用连接重用时,显式清理是必要的,无论是通过 PHP 进行持久连接(pg_pconnect),或者像这样的连接池保镖 http://wiki.postgresql.org/wiki/PgBouncer(尽管池化器本身可能会调用DISCARD ALL取决于其配置)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

取消分配准备好的查询 的相关文章

  • 如何在 Laravel 5 中对合并集合进行分页?

    我正在创建一个包含两种类型的对象的流 BluePerson 和 RedPerson 为了创建流 我获取所有这两个对象 然后将它们合并到一个集合中 这样做之后 我需要对它们进行分页 但是分页似乎是针对雄辩的模型和数据库查询 而不是集合 我见过
  • 使用php在html页面中显示bbcode

    我已经有一个 bbcode 字符串 mybbcode b Hello word b 使用 php 我想在 html 页面中以 html 格式显示它 例如 div gt b hello word b div 基本上其他人已经对你说过了 但是如
  • 重定向而不是 404 错误页面 - 状态代码不起作用 (Nginx)

    我目前正在迁移到 nginx 服务器 我尝试将其放入名为的 404 ErrorDocument 中404 php 如果我现在尝试访问http mydomain com 404 php 这按预期工作 它将我重定向到 Google 但是一旦我尝
  • 知道何时调用 persist

    我正在使用 Doctrine 2 作为我的 ORM 一切进展顺利 但我一直想知道EntityManager persist 方法 这 持久实体 https www doctrine project org projects doctrine
  • 在 php 和 mysql 中使用 utf8mb4

    我读过 mysql gt 5 5 3 完全支持每个可能的字符 如果您使用编码utf8mb4对于某个表 列http mathiasbynens be notes mysql utf8mb4 http mathiasbynens be note
  • 限制分页页数

    objConnect mysql connect localhost root or die mysql error objDB mysql select db Test strSQL SELECT FROM UserAddedRecord
  • 用PHP动态生成二维码[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试在我的网站上生成二维码 他们所要做的就是在其中包含一个 URL 我网站上的变量将提供该 URL
  • 同一路由组的多个前缀

    我正在为一所学校编写一个相当简单的网站 该网站有新闻 文章 视频剪辑 等 它的工作方式是在主页中我们向访问者展示一些课程 例如 gt math gt geography gt chemistry 用户在其中选择 1 网站内容会根据用户的选择
  • 无法显示由 Fine-uploader 上传到 Amazon s3 的图像

    我现在尝试设置fineuploader s3以显示在aws服务器上成功上传的文件的图像 如示例页面上所做的那样 http fineuploader com s3 demo http fineuploader com s3 demo 我 仍然
  • PHP 和 MySQL 的重音字符错误

    我的问题是 直接通过 PHP 编写的内容是正确重音的 但是当重音单词来自 MySQL 时 字母会像这样 我尝试使用html charset as ISO 8859 1它修复了 MySQL 字母 但破坏了其他字母 解决这一切的一种方法是设置我
  • Laravel 类邮件程序不存在

    我将应用程序从 5 更新到 5 2 现在 当我调用 Mail send 时 它会返回一个异常 Class mailer 不存在 Mail send emails mail data gt content function m use to
  • 如何缓存 twitter api 结果?

    我想缓存 twitter api 结果的结果并将其显示给用户 缓存结果的最佳方法是什么 我正在考虑根据时间限制将结果写入文件 可以吗 还是应该使用任何其他方法 最重要的是 理想的缓存时间是多少 我想显示来自 twitter 的最新内容 但
  • 无法在 PHPUnit 中使用数据提供程序运行单个测试

    使用命令行运行测试时遇到问题 如果我像这样运行 phpunit phpunit no configuration filter testAdd DataTest DataProviderTest php 效果很好 但是我们使用正则表达式来准
  • PHP函数返回值到html标签

    我想获取函数的返回值并将其显示到特定的id 在我的 Class php 中 我有一个名为 login 的函数 用于验证密码是否正确 不正确
  • 除括号之间的内容外,所有内容均小写

    考虑以下字符串 LoReM FOO IPSUM dolor BAR Samet fooBar 我正在寻找一种方法来小写所有内容 除了 brackets 之间的内容应该被忽略 所以期望的输出是 lorem FOO ipsum dolor BA
  • Heredoc:常用的“EOT”实际上是什么意思?

    PHP s 定界例子 http www php net manual en language types string php language types string syntax heredoc似乎总是使用 EOT 有时是 EOD 作
  • 使用 html5 分块上传文件

    我正在尝试使用 html5 的文件 API 分块上传文件 然后在服务器端用 php 重新组装它 我正在上传视频 但是当我在服务器端合并文件时 大小增加了 并且它变成了无效文件 请注意 以下 html5 代码仅适用于 chrome 浏览器 在
  • SimpleXML插入处理指令(样式表)

    我想集成一个XSL文件在一个XML给我的字符串php CURL命令 我试过这个 output XML gived me by curl option hotel simplexml load string output hotel gt a
  • 使用“AND”表达式构建动态 SQL,而不混淆嵌套条件?

    总的来说 我对 php 和编码相当陌生 我有一系列条件需要测试它们是否已设置 它们是 option1 option2 option3 if isset option1 if isset option2 if isset option3 qu
  • 在 PHP 命令行上显示完整的堆栈跟踪

    Problem 我的 PHP 堆栈跟踪缩写为 Stack trace 0 www html table app create php 128 SoapClient gt call call Array 1 www html table ap

随机推荐