2017-04-07 64 views
-2

正在逐渐“my_query7”已经存在,我每一个用户试图在数据库中更新表leader_info时间调用这个函数,我已经通过文件走了pg_prepare和事先准备好的声明的错误我不明白它的意思应该只运行一次。代码片段将会有所帮助。谢谢。PHP的PostgreSQL的错误,准备好的语句已经存在

function add_leader_country($user_id,$l_country) 
{ 
    global $connection; 
    $query = pg_prepare($connection,"my_query7","update leader_info set l_country = $1 where user_id = $2 and status < 9"); 
$result = pg_execute($connection,"my_query7",array($l_country,$user_id)); 
if(!$result) 
{ 
    echo pg_last_error($connection); 
} 
else 
{ 
    echo "Records created successfully\n"; 
} 
$row = pg_affected_rows($result); 
return $row; 



} 
+1

*“我调用该函数的每个用户尝试** **添加新的领导人到数据库时” * - 添加或更新?您的查询显示为更新,而不是插入。 –

+1

所以......嗯...... my_query8'在哪里?你提供了'my_query7'? –

回答

0

准备执行不允许重复命名,所以这是你的错误。 一个查询只应该准备一次,例如,在一个准备状态的循环中必须被设置为for并且在for中执行。

$result=$pg_prepare($connection,"my_query7",$query); 
    for($id=1;$id<3;$id++){ 
     $result=pg_execute($connection,"my_query7",array($l_country,$user_id)); 
     ... 
    } 

在你的情况下使用一个函数,使用多次准备和执行,这是一个问题。

什么是你想用这个功能来实现调度更像你在哪里调用该函数的代码。这样我可能可以帮助你。

如果你想使用的功能,我会用这种方法

为例,从https://secure.php.net

<?php 
function requestToDB($connection,$request){ 
    if(!$result=pg_query($connection,$request)){ 
     return False; 
    } 
    $combined=array(); 
    while ($row = pg_fetch_assoc($result)) { 
     $combined[]=$row; 
    } 
    return $combined; 
} 
?> 

<?php 
$conn = pg_pconnect("dbname=mydatabase"); 

$results=requestToDB($connect,"select * from mytable"); 

//You can now access a "cell" of your table like this: 
$rownumber=0; 
$columname="mycolumn"; 

$mycell=$results[$rownumber][$columname]; 
var_dump($mycell); 

如果whant使用preaper和执行功能,尝试创建一个用于创建只准备一个功能一次在会议上。不要忘记给出不同的名称,以免发生相同的错误。我试图找到类型的东西,没有找到。如果你找到一个供他人学习的形式。如果在此期间我找到了一种方式来呈现它。

+0

我上面发布的方法是很多方法中的一种,我打算使用该方法在用户每次提供国家详细信息时更新数据库中的表格。涉及多个用户。 –

+0

您尝试创建一个在会话中仅创建一次准备工作的函数。不要忘记给出不同的名称,以免发生相同的错误。 –

+0

嗨,我发现了一些可以让你使用它的功能。我不确定它是否有效。试试看,如果它解决了问题。 Pg_free_result($ result); –

相关问题