Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl “我怎么到处走动?”;DBD::Pg::st execute失败:错误:已准备好的语句“已存在”;错误_Perl_Bash_Dbd - Fatal编程技术网

Perl “我怎么到处走动?”;DBD::Pg::st execute失败:错误:已准备好的语句“已存在”;错误

Perl “我怎么到处走动?”;DBD::Pg::st execute失败:错误:已准备好的语句“已存在”;错误,perl,bash,dbd,Perl,Bash,Dbd,一点背景: 我有一个perl脚本,它在一个循环中执行许多操作 在循环内部,我创建了一个准备好的语句,如下所示: // inside loop my $statement = "select xxxx from zzzzzz where $foobar;"; my $query = $connect->prepare($statement); $query->execute(); 每次循环完成时,$foobar都会更新为一个新值,这就是为什么每次运行时我都要更改查询,

一点背景: 我有一个perl脚本,它在一个循环中执行许多操作

在循环内部,我创建了一个准备好的语句,如下所示:

  // inside loop
  my $statement = "select xxxx from zzzzzz where $foobar;";
  my $query = $connect->prepare($statement);
  $query->execute();
每次循环完成时,$foobar都会更新为一个新值,这就是为什么每次运行时我都要更改查询,但尝试这样做时会出现错误

当脚本运行时,我收到以下错误:

  DBD::Pg::st execute failed: ERROR:  prepared statement "xxxxxxxxxxxxx" already exists at 
因为我正在传递一个变量,该变量在每次循环运行时都会更新,并且假设我需要使用这个准备好的语句,那么如何避免这个错误呢

谢谢你抽出时间

编辑:

对于未来有此问题的人,请查看以下内容:

我正试着去

my $sth = $dbh->prepare('select interval ?');

列出一些解决方法:关闭服务器端 通过pg_server_prepare标志或使用例如“?::interval”代替
“间隔?”将准备好的语句移出循环。如果有一个变量需要传递给准备语句,则将使用
标记将该变量传递给准备语句。下面是一个例子:

my $stmt = $dbh->prepare('SELECT * FROM table WHERE id = ?');
foreach ... {

    my $var = <something>;
    $stmt->execute($var);
}
my$stmt=$dbh->prepare('SELECT*fromtable其中id=?');
foreach。。。{
我的$var=;
$stmt->execute($var);
}

在这里,准备好的语句只创建一次,
用于传递变量。调用execute时,将变量作为参数传入。

将准备好的语句移出循环。如果有一个变量需要传递给准备语句,则将使用
标记将该变量传递给准备语句。下面是一个例子:

my $stmt = $dbh->prepare('SELECT * FROM table WHERE id = ?');
foreach ... {

    my $var = <something>;
    $stmt->execute($var);
}
my$stmt=$dbh->prepare('SELECT*fromtable其中id=?');
foreach。。。{
我的$var=;
$stmt->execute($var);
}

在这里,准备好的语句只创建一次,
用于传递变量。调用execute时,将变量作为参数传入。

可以使用多个变量执行相同的操作吗?例如my$stmt=$dbh->prepare(“从表中选择*,其中id=?和name=”?”)$stmt->execute($var1,$var2)@是的,你就是这样做的<在您的示例中,
$var1
将与
id
匹配,
$var2
将与
name
匹配。您让我克服了这个困难,谢谢,将您的答案标记为正确,尽管现在我发现DBD::Pg::st execute失败:错误:语法错误在“$1”处或附近第1行:在/xxxscript xxxx.pl第516行选择$1+间隔“5秒”。我正在传递一个字符串,我不知道如何使用“'”标记。但是感谢您的帮助,或者我得到DBD::Pg::st execute failed:在./tedect\u dev.pl第516行需要0时,使用1个绑定变量调用。当我执行$connect->prepare(“选择时间戳“?”+间隔“5秒”);使用绑定参数时不使用引号<代码>$dbh->prepare(“从id=?和name=?”的表中选择*”可以使用多个变量执行相同的操作吗?例如my$stmt=$dbh->prepare(“从表中选择*,其中id=?和name=”?”)$stmt->execute($var1,$var2)@是的,你就是这样做的<在您的示例中,
$var1
将与
id
匹配,
$var2
将与
name
匹配。您让我克服了这个困难,谢谢,将您的答案标记为正确,尽管现在我发现DBD::Pg::st execute失败:错误:语法错误在“$1”处或附近第1行:在/xxxscript xxxx.pl第516行选择$1+间隔“5秒”。我正在传递一个字符串,我不知道如何使用“'”标记。但是感谢您的帮助,或者我得到DBD::Pg::st execute failed:在./tedect\u dev.pl第516行需要0时,使用1个绑定变量调用。当我执行$connect->prepare(“选择时间戳“?”+间隔“5秒”);使用绑定参数时不使用引号<代码>$dbh->prepare(“从id=?和name=?”的表中选择*”您正在使用什么版本的东西(perl、Postgres libs、Postgres server、DBI、DBD::Pg)?这可能是一个错误。需要明确的是,“interval”问题是Pg后端在被要求准备语句时生成的语法错误,该行为是在2006年DBD驱动程序引入真正的服务器端准备时引入的。引发此问题的“准备好的语句已经存在”问题有不同的根本原因。您使用的是什么版本的所有内容(perl、Postgres libs、Postgres server、DBI、DBD::Pg)?这可能是一个错误。需要明确的是,“interval”问题是Pg后端在被要求准备语句时生成的语法错误,该行为是在2006年DBD驱动程序引入真正的服务器端准备时引入的。引发此问题的“已准备好的声明已存在”问题有不同的根本原因。