2012-12-14 119 views
0

我在我的數據庫Postgres中有兩個存儲過程,它們都具有相同的名稱,但不同之處在於參數。使用PDO調用具有相同名稱的存儲過程

過程1(::字符串,整數::,::串,::整數)

過程1(::字符串,整數::,::整數)

在PDO做bindParam正確,即將到來的STR,INT,INT但prepere總是執行procedure1。

我如何讓他理解我所說的程序2?

有關更多幫助的信息?我清楚了?感謝

編輯===

...

$bounds = null; // forced for debug 

if(!is_null($bounds)){ 
    $query = "SELECT procedure1(:name, :domain, :geo, :userid)"; 
    $stmt = $db->prepare($query); 
    $stmt->bindParam('name', $name, PDO::PARAM_STR); 
    $stmt->bindParam('domain', $idDomain, PDO::PARAM_INT); 
    $stmt->bindParam('geo', $geoString, PDO::PARAM_STR); 
    $stmt->bindParam('userid', $userId, PDO::PARAM_INT); 
}else{ 
    $query = "SELECT procedure1(:name, :domain, :userid)"; 
    $stmt = $db->prepare($query); 
    $stmt->bindParam('name', $name, PDO::PARAM_STR); 
    $stmt->bindParam('domain', $idDomain, PDO::PARAM_INT); 
    $stmt->bindParam('userid', $userId, PDO::PARAM_INT); 
} 
$result = $stmt->execute(); 

...

它給人的是,他正在運行需要四個參數

+0

請顯示您具體的代碼。 –

+0

PDO是否支持postgres的sproc重載? –

回答

0

嘗試過程中的錯誤更改您的$query語句以明確告訴PDO的類型,並避免額外的代碼切換到bindValue(PDO使用PARAM標誌f ormat SQL,而不是強制轉換數據類型):

$bounds = null; // forced for debug 

if(!is_null($bounds)){ 
    $query = "SELECT procedure1(:name::VARCHAR, :domain::INTEGER, :geo::VARCHAR, :userid::INTEGER)"; 
    $stmt = $db->prepare($query); 
    $stmt->bindValue('name', $name); 
    $stmt->bindValue('domain', $idDomain); 
    $stmt->bindValue('geo', $geoString); 
    $stmt->bindValue('userid', $userId); 
}else{ 
    $query = "SELECT procedure1(:name::VARCHAR, :domain::INTEGER, :userid::INTEGER)"; 
    $stmt = $db->prepare($query); 
    $stmt->bindValue('name', $name); 
    $stmt->bindValue('domain', $idDomain); 
    $stmt->bindValue('userid', $userId); 
} 
$result = $stmt->execute(); 
相關問題