2014-01-05 58 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

所以我已經做了一些調查研究,並發現該WHERE根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

只是爲了在此處添加註釋,我認爲甲骨文

'_' + input + '%' 

下將被解釋爲一個數值相加。

,我認爲它是什麼抱怨會被固定:

'_' || input || '%' 

爲||運算符是字符串連接。

你有沒有機會來自SQL Server後臺,前者適用於追加字符串?

+0

我不知道這是否會奏效,我發表了一條評論,並解釋了我的方法來順利解決問題。我需要找到該項目以驗證,我會搜索並回答。 – hepifish