2017-04-07 104 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); –