我将准备好的声明创建为:
pg_prepare('stm_name', 'SELECT ...');
今天,我在两次声明具有相同名称的准备好的语句时遇到了一个问题(两次调用一个函数以表示错误):
Warning: pg_prepare() [function.pg-prepare]: Query failed: ERROR: prepared statement "insert_av" already exists in xxx on line 221
那么,作为问题的标题,有一种方法可以检查是否已经存在具有相同标签的准备语句,如果存在,则覆盖它?
我知道这个错误来自我的错误,只需在代码开头声明准备好的语句即可解决,但我想知道是否有解决方案可以更好地控制它们。
编辑:
在 Milen 回答之后,很简单地检查准备好的语句是否已经在使用中,只需在数据库中查询表 pg_prepared_statements:
try{
$qrParamExist = pg_query_params("SELECT name FROM pg_prepared_statements WHERE name = $1", array($prepared_statement_name));
if($qrParamExist){
if(pg_num_rows($qrParamExist) != 0){
echo 'parametized statement already created';
}else{
echo 'parametized statement not present';
}
}else{
throw new Exception('Unable to query the database.');
}
}catch(Exception $e){
echo $e->getMessage();
}
但是,我认为这不是一个好的解决方案,因为我每次都必须查询数据库。
好的,通常准备好的语句在脚本的开头声明,然后就可以重用,但是,我有一个连接良好的类,当我只使用其中的 3 个时,我不喜欢声明 10 个准备好的语句。
所以,我想我将使用一个简单的 PHP 数组来跟踪我创建的语句,然后使用isset()
函数检查它是否存在或需要创建:
try{
$prepare = pg_prepare('my_stmt_name', "SELECT ...");
if($prepare){
$this->rayPrepared['my_stmt_name'] = true;
}else{
throw new Exception('Prepared statement failed.');
}
}catch(Exception $e){
echo $e->getMessage();
}