如何检查PHP中是否已存在postgres prepared语句

时间:2015-12-02 02:10:48

标签: php postgresql prepared-statement

我有一个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已准备好的语句是否已经存在,如果它已经存在,那么只是采用已经创建的预准备语句?

谢谢。

1 个答案:

答案 0 :(得分:1)

一种解决方案是使用静态变量来指示您是否已创建语句。函数第一次执行时, $ 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));
}
  

静态变量仅存在于本地函数范围内,但确实如此   当程序执行离开这个范围时,它不会失去它的价值。

来自:http://php.net/manual/en/language.variables.scope.php#language.variables.scope.static