PHP/PostgreSQL:检查准备好的语句是否已存在

2023-11-23

我将准备好的声明创建为:

pg_prepare('stm_name', 'SELECT ...');

今天,我在两次声明同名的准备好的语句时遇到了问题(错误地调用了两次函数):

Warning: pg_prepare() [function.pg-prepare]: Query failed: ERROR: prepared statement "insert_av" already exists in xxx on line 221

所以,正如问题标题,有一种方法检查具有相同标签的准备语句是否已存在,如果存在,则覆盖它?

我知道这个错误是由于我的错误造成的,只需在代码开头声明准备好的语句即可解决,但我想知道是否有解决方案可以更好地控制它们。

EDIT:

在 Milen 回答之后,检查准备好的语句是否已在使用中非常简单,只需在数据库中查询表 pg_prepared_statements 即可:

try{
    $qrParamExist = pg_query_params("SELECT name FROM pg_prepared_statements WHERE name = $1", array($prepared_statement_name));
    if($qrParamExist){
        if(pg_num_rows($qrParamExist) != 0){
            echo 'parametized statement already created';
        }else{
            echo 'parametized statement not present';
        }
    }else{
        throw new Exception('Unable to query the database.');
    }
}catch(Exception $e){
    echo $e->getMessage();
}

但是,我认为这不是一个好的解决方案,因为我每次都必须查询数据库。

好吧,通常准备好的语句是在脚本的开头声明的,然后就可以重用,但是,我有一个很好连接的类,当我只使用其中 3 个时,我不喜欢声明 10 个准备好的语句。

所以,我想我将使用一个简单的 PHP 数组来跟踪我创建的语句,然后使用isset()函数检查它是否存在或需要创建:

try{
    $prepare = pg_prepare('my_stmt_name', "SELECT ...");
    if($prepare){
        $this->rayPrepared['my_stmt_name'] = true;
    }else{
        throw new Exception('Prepared statement failed.');
    }
}catch(Exception $e){
    echo $e->getMessage();
}

一种方法(我希望有人指出一种更简单的方法):

<?
$prepared_statement_name = 'activity1';
$mydbname = '...';

$conn = pg_connect("host=... port=... dbname=... user=... password=...");

$result = pg_query_params($conn, 'SELECT name FROM pg_prepared_statements WHERE name = $1', array($prepared_statement_name));

if (pg_num_rows($result) == 0) {
    $result = pg_prepare($conn, $prepared_statement_name, 'SELECT * FROM pg_stat_activity WHERE datname =  $1');
}

$result = pg_execute($conn, $prepared_statement_name, array($mydbname));
while($row = pg_fetch_row($result)) {
    var_dump($row);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP/PostgreSQL:检查准备好的语句是否已存在 的相关文章

  • 我需要一个实时网站来测试 Facebook Connect 吗?

    我正在尝试将 facebook connect 与 nmy 社交网站集成 目前用户在我的网站上使用自己的帐户创建和登录 但我希望允许用户基本上在我的网站上创建一个新帐户 但使用 facebook connect 登录 我我认为在我的网站上这
  • 在 postgresql 中查找和汇总具有重叠记录的日期范围

    我有一个大型数据集 我想对记录具有重叠时间的计数进行求和 例如 给定数据 id 1 name A start 2018 12 10 00 00 00 end 2018 12 20 00 00 00 count 34 id 2 name B
  • PostgreSQL 中“-”处或附近的语法错误

    我正在尝试运行查询来更新用户密码 alter user dell sys with password Pass 133 但因为 它给了我这样的错误 ERROR syntax error at or near LINE 1 alter use
  • 无法为数据库添加 SSL 支持

    我正在使用 Spring 3 Hibernate 和 postgres 9 2 为了启用 SSL 数据库连接 我按照以下步骤操作 创建自签名证书 参考 http www postgresql org docs 9 2 static ssl
  • 使用 PHP 将 class="active" 添加到活动页面

    动态标头 CSS 类更改为活动使用 PHP 目录 我想要的班级 li 在活动目录下更改标签 现在 每个指南都向我展示了当您的页面等于它时如何执行此操作 但我想更改 这 li li 取决于我所在的目录 例如 如果说我在 http exampl
  • mongodb从不同数据库中选择

    我有大约 200 个 mongodb 数据库 每个数据库都有一个名为 Group 的集合 在该集合中有一个名为 meldingId 的字段 是否可以进行一个 mongodb 查询来查找不同数据库中的所有值 我设法通过 selectDB da
  • 如何在codeigniter中插入具有多个单选名称的单选按钮值?

    我正在尝试使用 codeigniter 进行在线测验 其中有一个针对某些主题的动态测验 用户可以在每个问题中添加问题和多项选择答案 我如何获得每个问题的每个多项选择答案中每个答案的值 p p
  • 在 PHP 中重新定义常量

    是否可以在 php 中重新定义由define功能 我有一个包含多个常量的类 其中包含用户数据 我正在尝试为多个用户使用该类 define ALLEGRO ID id define ALLEGRO LOGIN login define ALL
  • php - 未知:第 0 行需要打开失败。laravel 5.6

    我刚刚安装了 laracast flash 并通过 Composer 更新了 nesbot carbon 下载碳时命令发疯了 Cmd界面显示了一会界面上散落的文字和方框 下载完成 做过php artisan serve at localho
  • PHP 数组到 JavaScript 数组

    假设我在 php 中有这个数组 cities array Caracas gt array air gt array 4 3 5 Working Days Saturday sea gt array 18 3 5 Days Wednesda
  • PHP—array_merge_recursive() - 相同键没有数组

    php a php gt data1 tag gt div classes gt 1 2 3 php gt data2 tag gt section classes gt 2 3 4 5 6 php gt result array merg
  • 使用 OpenSSL 在 PHP 中进行 AES 加密/在 Node.js 中进行解密

    我正在使用 PHP 和 Nodejs 使用 OpenSSL 进行对称加密 PHP 使用 OpenSSL 库 Node js 解密基于实现的加密 问题是 Node js 中的解密文本只是部分正确 PHP 加密函数 function encry
  • Laravel nova diffForHumans 日期时间

    我对用户有字段last active 我想用 diffForHumans 或显示时间time from now来自 Moment js 我怎样才能做到呢 现在我只使用 DateTime make Activiy last active gt
  • 如何在 PHP 中使用 file_get_contents 获取图像的 MIME 类型

    我需要获取图像的 MIME 类型 但我只有图像的正文file get contents 是否有可能获取 MIME 类型 是的 你可以这样得到它 file info new finfo FILEINFO MIME TYPE mime type
  • 获取特定月份/年份的第一天

    有没有比以下更好的方法返回特定月份 年份的第一天的日期 month date m year date Y from date Y m d mktime 0 0 0 month 1 year 这在计算上并不完全优雅 但我喜欢它 因为它非常可读
  • 自动生成PHP代码的策略?

    我正在开发一个框架 在后端创建 ER 图后 该框架可以动态地对自身的各个部分进行编程 作为一名 PHP 新手 我想知道是否还有比打开一个纯 xyz php 文本文件然后将动态生成的代码添加到该文件更奇特的事情 是的 尝试一下Zend Cod
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • array_merge 更改键

    我得到以下数组 arr array 6 gt Somedata 7 gt Somedata1 8 gt Somedata2 问题是 当我使用array merge array Select the data arr 它确实将数组键更改为 A
  • PHP 如何判断用户是否按下了 Enter 键或 Submit 按钮?

    我遇到的问题是我在一个表单中有多个提交输入 每个提交输入都有不同的值 我更愿意将它们保留为提交 Whenever the user presses Enter it is as though the topmost submit input
  • gmail 不断阻止 PHPmailer 登录

    我将在接下来的 8 小时内部署一个网站 而 Gmail 刚刚停止接受 PHPmailer 登录我的帐户 起初 它在测试过程中工作了几个小时 然后 它就停止工作了 我已经允许所有允许不太安全的应用程序从 gmail 登录 但它仍然不允许 ph

随机推荐

  • CMake ENDIF 和 ELSE 参数的目的

    在CMake中ELSE and ENDIF控制流函数将表达式作为参数 这些都是optional根据文档 那么这些的目的是什么呢 难道只是为了原创IF为了维护目的表达更清晰 或者它是否提供了一些功能 正如您所说 这些表达式是可选的 当您嵌套时
  • 使用 Mongodb ObjectID 作为文档 ID?

    我正在尝试用 mongoDB 制作一个板 我想用 ObjectID 分配文档 ID 如果用户可以通过以下方式访问文档页面http www example com 4easdf123123其中 4easdf123123 是 mongoDB O
  • 通过线程工作时出现错误“解释器关闭后无法安排新的 future”

    我有一个大问题 三天内我自己都无法解决 我们有一个应用程序 可以创建 Json 文件并通过 Boto3 库将它们发送到 Amazon S3 服务器 该应用程序是在 Python 3 8 上开发的 没有任何问题 然后Python升级到3 9
  • C 中的算法 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 学习 C 算法的最佳地点或
  • 如何减少 Android xml 布局中文本周围的填充?

    我有 1 英寸高的文本 但视图框占用 1 5 英寸 因此白色字体上方和下方有 1 4 英寸的黑色空间 我想减少 1 4 英寸 这样我就可以在 6 英寸屏幕上显示 5 行文本 而不是 4 行 我可以使用 android lineSpacing
  • 如何给 html 按钮标签添加图像

    我想知道是否有办法给出 HTML 按钮标签
  • 如何控制 Pelican 文章类别中的页面顺序?

    我正在使用 pelican jinja2 模板来生成基于类别的导航菜单 我需要一种方法来控制页面的顺序 或者至少需要一个技巧来允许我选择要列出的第一个页面 for a in articles if a category category l
  • 使用注释生成 equals / hashcode / toString

    我相信我在某处读到人们在编译时 使用 APT 通过确定哪些字段应该是哈希 相等测试的一部分来生成 equals hashcode toString 方法 我在网上找不到类似的东西 我可能梦见过它 可以这样做 public class Per
  • Or 与 OrElse

    有什么区别or and OrElse if temp is dbnull value or temp 0 产生错误 未为类型 DBNull 和类型 Integer 定义运算符 而这个就像一个魅力 if temp is dbnull valu
  • Expect 中的正则表达式

    我刚刚开始学习期望脚本 我一直在尝试从输出中提取以下内容 core 4046140998 01 10 133211 使用以下命令使用期望脚本 有人可以告诉我哪里出了问题吗 我想将整个字符串 即 core 4046140998 01 10 1
  • spring boot https PKCS12 DerInputStream.getLength(): lengthTag=111,太大

    我需要在 https 上使用 Spring boot 应用程序 我有一个 LetsEncrypt 签名的密钥 我将此证书转换为 PKCS12 如下所示 openssl pkcs12 export in fullchain pem inkey
  • 为什么 PL/SQL 中不允许静态 ddl?

    在 Oracle PL SQL 块中 为什么允许动态 sql begin execute immediate drop table table name end 但静态不是吗 begin drop table table name end
  • pyspark,比较数据框中的两行

    我试图将数据帧中的一行与下一行进行比较 以查看时间戳的差异 目前数据如下 itemid eventid timestamp 134 30 2016 07 02 12 01 40 134 32 2016 07 02 12 21 23 125
  • 在没有框架的情况下路由 REST 请求?

    我一直在阅读这篇文章来学习如何构建 REST API http www gen x design com archives create a rest api with php 有一次它说 假设您已将请求路由到用户的正确控制器 如果没有框架
  • 在张量流中使用 SSIM 损失函数处理 RGB 图像

    我想用SSIM指标作为我正在研究的模型的损失函数张量流 SSIM 应该测量去噪自动编码器的重构输出图像与输入未损坏图像之间的相似度 RGB 据我了解 为了在张量流中使用 SSIM 指标 图像应该是归一化为 0 1 或 0 255 而不是 1
  • 在 C++11 及以上版本中如何检查线程是否完成工作?

    如何在 C 11 及更高版本中检查线程是否已完成工作 我一直在阅读文档并编写了以下代码 include
  • phpMyAdmin - 波浪号 (~) 在行列中意味着什么?

    我最近升级了 Joomla 从 1 5 到 1 7 的安装 带有大量文章数据集 而升级方法是升级数据库 基本上将内容插入到另一个表中 我注意到Rows列值以波形符 为前缀 现在 乍一看 我认为这意味着该值是近似值 因为当我刷新页面时 我看到
  • java中如何从系统字体中获取ttf字体数据

    我的系统上安装了一些 ttf 字体 我使用得到该列表 GraphicsEnvironment getLocalGraphicsEnvironment getAvailableFontFamilyNames 这不仅是 ttf 字体 而且是我猜
  • 如何在 Angular2 中实现可折叠侧边栏?

    我正在学习 angular2 并希望实现一个可折叠的侧边栏 类似于https almsaeedstudio com themes AdminLTE index2 html 在 Angular 2 中 我尝试查找示例 但找不到任何示例 您能提
  • PHP/PostgreSQL:检查准备好的语句是否已存在

    我将准备好的声明创建为 pg prepare stm name SELECT 今天 我在两次声明同名的准备好的语句时遇到了问题 错误地调用了两次函数 Warning pg prepare function pg prepare Query