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