oci_fetch_all()中的数字无效

时间:2014-01-05 23:19:57

标签: php sql oci

所以,我需要使用php才能通过一个程序从我的数据库中提取一些信息。 我的代码中存在问题,我无法理解。

我有以下程序:

    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;

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

所以我做了一些研究,发现WHERE gen LIKE'_'+ input +'%'语句无效,所以我把代码更改为:

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]。'% “;

答案 1 :(得分:0)

只是在这里添加一个注释,我想在Oracle

'_' + input + '%'

将被解释为数字加法。

我认为抱怨的内容将通过以下方式解决:

'_' || input || '%'

作为|| operator是字符串连接。

您是否有机会来自SQL Server后台,前者对于追加字符串是正确的?