2014-01-05 4 views
1

Итак, мне нужно использовать php для извлечения некоторой информации из моей базы данных с помощью процедуры. В моем коде есть проблема, и я не могу добраться до нее.Недопустимый номер в oci_fetch_all()

У меня есть следующая процедура:

CREATE OR REPLACE PROCEDURE example(
    input IN varchar2, 
    p1 OUT SYS_REFCURSOR) 
    AS 
    BEGIN 
     OPEN p1 FOR 
     SELECT title 
     FROM book 
     WHERE gen LIKE '_' + input + '%' 
    ORDER BY gen; 
    END; 

и вот мой PHP код:

$curs = oci_new_cursor($con); 
$stmt = oci_parse($con, "begin example(:input, :data); end;"); 

$word = 'S'; 
oci_bind_by_name($stmt, "input", $word); 
oci_bind_by_name($stmt, "data", $curs, -1, OCI_B_CURSOR); 

oci_execute($stmt); 
oci_execute($curs); 

$nr_rows = oci_fetch_all($curs, $data, null, null, OCI_FETCHSTATEMENT_BY_COLUMN); 

Я думаю, что код хорошо написан, но для некоторых нечетных причин я получаю эту ошибку

"Предупреждение: oci_fetch_all(): ORA-01722: неверный номер в C: .."

Я попытался в процессе, но ошибка все же происходит.

Выбрать, что я смотрю на это следующие:

 SELECT title 
     FROM book 
     WHERE gen LIKE '_S%' 
    ORDER BY gen; 

Любые идеи?

ответ

0

Так что я сделал некоторые дополнительные исследования и выяснил, что ГДЕ генераторная LIKE «_» + вход + «%» утверждение является недействительным, так что я изменил код в:

CREATE OR REPLACE PROCEDURE example(
input IN varchar2, 
p1 OUT SYS_REFCURSOR) 
AS 
BEGIN 
    OPEN p1 FOR 
    SELECT title 
    FROM book 
    WHERE gen LIKE input 
ORDER BY gen; 
END; 

и Я отредактировал php-код до $ word = 'S%', далее я сделал метод POST и написал $ word = ''. $ _ POST [word]. '%';

0

Просто добавить примечание здесь, я думаю, что под Oracle

'_' + input + '%' 

будет интерпретироваться как численное дополнение.

Я думаю, что это жалуется будет определена:

'_' || input || '%' 

как || оператор - конкатенация строк.

Любая вероятность того, что вы исходите из фона SQL Server, где первое верно для добавления строк?

+0

Я не знаю, если это сработает, я отправил комментарий и объяснил, как мой метод работает нормально. Мне нужно найти этот проект, чтобы проверить, я буду искать его и отвечать. – hepifish

Смежные вопросы