如何检查 PHP 中是否已经存在 postgres 准备好的语句

How to check if postgres prepared statement exists already in PHP

我有一个 PHP 脚本有时会在一个脚本中多次调用一个函数 运行。

函数如下所示:

function insert_values($values) {
$sql = "insert into...";
pg_prepare($connection,"statement_name",$sql);
pg_execute($connection,"statement_name",array($values));
}

到目前为止一切都很好 - 当它执行一次时

但是,如果我的脚本在同一连接上多次调用此函数,PHP 会发出警告:

[Tue Dec 01 20:58:31 2015] [error] [client 10.64.241.13] PHP Warning:  pg_prepare(): Query failed: ERROR:  prepared statement "insert_values" already exists in /var/www/include/classes/classes.php on line 955

现在,如果这只是一个简单的 PHP 警告,我可能不会注意它。

但是在 Postgres 端,它声明 Query failed: ERROR - 所以查询当然不会 运行。

显然,我理解为什么 Postgres 会杀死在同一连接上创建具有相同名称的新准备语句的人。

所以....有没有人知道是否有一种简单的方法来检查if准备好的语句是否已经存在,如果它已经存在,那么只需要使用已经创建的准备好的语句?

谢谢。

一种解决方案是使用静态变量来指示您是否已经创建了语句。函数第一次执行时,$once为false,准备语句,将$once改为true。之后,它不会重新创建语句。

function insert_values($values) {
    static $once = false;
    if ($once === false) {
        $sql = "insert into...";
        pg_prepare($connection,"statement_name",$sql);
        $once = true;
    }
    pg_execute($connection,"statement_name",array($values));
}

A static variable exists only in a local function scope, but it does not lose its value when program execution leaves this scope.

发件人:http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static