Процедуры Oracle в php с PDO


У меня проблема с propel 1.6 и процедурой oracle. Я публикую это в разделе PDO, потому что я продвигаю только для того, чтобы перенаправить мой звонок в PDO.

В основном процедура получает имя пользователя и пароль, проверяет, все ли в порядке, и возвращает пользователя. По этой причине он возвращает тип types.CursorType.

sql начинается так.

CREATE OR REPLACE 
PROCEDURE         "SP_LOGIN" (R_CURSOR OUT types.cursorType, UserId IN 
VARCHAR2, Password IN VARCHAR2) 

Мой php-код:

$con = Propel::getConnection(); 
$sql = 'BEGIN SP_LOGIN(:CURSOR, :0, :1); END;'; 
$stmt = $con->prepare($sql); 
$result_arr; 
$stmt->bindParam(":CURSOR", $result_arr, PDO::PARAM_STR || PDO::PARAM_INPUT_OUTPUT); 
$stmt->bindParam(":0", $username, PDO::PARAM_STR); 
$stmt->bindParam(":1", $password, PDO::PARAM_STR); 
$stmt->execute(); 
$result_arr = $stmt->fetchAll(); 

Теперь это вызывает исключение типа: {Исключение PDOException} Состояние SQLSTATE[HY000]: Общая ошибка: 6550 ocistmтекстовый: ORA-06550: линея 1, колонна 7: PLS-00306: числа или типы неверных аргументов, вызывающих "SP_LOGIN"

Что я делаю не так?

Заранее благодарю.

P.S: Я задаю этот вопрос на форуме Propel, и они направляют меня на поиск решения PDO.

Author: Rodrigo Santellan, 2011-11-14

2 answers

Я бы заподозрил, что проблема заключается в первом параметре. Вы говорите PDO, что это строка (PDO::PARAM_STR), но на самом деле это types.cursorType. В руководстве по PHP есть комментарий пользователя, который предполагает, что курсоры ссылок не поддерживаются.

К сожалению, драйвер Oracle для PDO является экспериментальным и (IMHO) в основном заброшен.

 3
Author: Álvaro González, 2011-11-14 12:14:49

Проверяет, все ли в порядке, и возвращает пользователю

Нет - в соответствии с прототипом он возвращает курсор. Курсоры не имеют смысла вне PL/SQL. Если вы измените тип на sys_refcursor и явно инициализируете $result_arr в виде массива, я бы ожидал, что у него будет больше шансов на работу.

Хотя, глядя на ответ Альваро и отсутствие нескалярного типа параметра, я думаю, что это может быть не так.

 3
Author: symcbean, 2011-11-14 12:32:15