如何检查 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
我有一个 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