2012-05-22 3 views
2

Недавно я начал играть с хранимыми процедурами для db2 (один день назад), и мне удалось создать очень простой SP, который отлично работал, когда я тестировал их в iAccess Navigator. Теперь я пытаюсь вызвать SP из моей модели, но Im получает ошибки назад, и я не уверен, как получить возвращаемую переменную. Вот кодвызов хранимой процедуры db2 из zend

здесь мой SP

drop procedure schema.test_ac ; 
CREATE PROCEDURE schema.test_ac (IN a int, in b int, out c int) 
LANGUAGE SQL 
BEGIN 
    set c=b+a; 
END; 

здесь код PHP

public function storePro(){ 
    $queryStr = "call test_ac (1,1,?)"; 

     $stmt = $this->db->query($queryStr); 
     print_r($stmt->fetchAll()); 
} 

любая помощь будет хорошо Спасибо

+0

Какое сообщение об ошибке? Я думаю, вы должны использовать $ this -> _ db вместо $ this-> db – Venu

+0

, это значение db '$ this-> db = Zend_Db_Table :: getDefaultAdapter();' , и это исключение Zend_Db_Statement_Db2_Exception # 256 –

ответ

2

Zend_Db может иметь проблемы при работе с DB2 хранимые процедуры. Я попытаюсь установить это в ZF 2.0. Однако сегодня вы можете успешно запустить свой пример, используя базовые функции драйвера ibm_db2. Я тестировал это на системе v7.1 IBM i:

// get actual db2 resource from ZF object 
$dbConn = $this->db->getConnection(); 

if (!$dbConn) { 
    die("could not get connection"); 
} 

$queryStr = "call test_ac (?, ?, ?)"; 

$stmt = db2_prepare($dbConn, $queryStr); 

if (!$stmt) { 
    die ("Could not prepare statement. " . db2_stmt_error()); 
} 

// set values to be bound. All three variables must be created. 
$in1 = 1; 
$in2 = 2; 
$out1 = 0; // irrelevant but must provide 

db2_bind_param($stmt, 1, "in1", DB2_PARAM_IN); 
db2_bind_param($stmt, 2, "in2", DB2_PARAM_IN); 
db2_bind_param($stmt, 3, "out1", DB2_PARAM_OUT); 

$result = db2_execute($stmt); 

if ($result) { 
    // success! 
    echo "value of output var: $out1"; 

} else { 

    die("Execute failed: " . db2_stmt_error($stmt)); 
} 
Смежные вопросы