2011-01-19 14 views
4

안녕하십니까, PHP-PDO와 Oracle 11g를 사용하고 있습니다. 필자는 많은 기능과 저장 프로 시저가있는 Oracle 패키지로 작업하고 있습니다. 이제 sql * plus 또는 sql 개발자 IDE에서 함수 중 하나를 호출하면이 명령을 실행하여 결과 집합을 가져옵니다.PHP의 오라클 패키지에 함수/프로 시저 호출하기

select package_name.function_name(param1,param2) from dual 

잘 작동하고 결과 세트를 반환합니다. 이제 동일한 작업을 수행 할 때 PDO 예외 처리에서 오류가 발생합니다. PHP에서 끝나는 코드는 다음과 같습니다.

$stmt = "select package_name.function_name (?,?) from dual"; 
$res = $this->ConnOBJ->prepare($stmt); 
$param1 = '1'; 
$param2 = null; 
$result->bindParam(1,$param1); 
$result->bindParam(2,$param2); 
$result->execute(); 

그리고 다시 로그 파일에 기록되는 예외가 발생합니다.

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 904 OCIStmtExecute: ORA-00904: "PACKAGE_NAME"."FUNCTION_NAME"": invalid identifier (/var/www/php-5.3.3/ext/pdo_oci/oci_statement.c:146)' in /opt/web/dir/ora_class.php:209 Stack trace: #0 /opt/web/dir/ora_class.php(209): PDOStatement->execute() #1 /opt/web/dir/ora_class.php(298): dbPDO->execPackage() #2 {main} thrown in /opt/web/dir/ora_class.php on line 209 

잘못된 방식으로 쿼리를 전달합니까? 아니면 매개 변수를 잘못된 방식으로 바인딩합니까?

: 편집

안녕하세요 지금은 오라클을 겪고 데이터를 가지고 있고, null 값을 전달하는 방법을 발견했다. 내 코드는 지금

$stmt = "select package_name.function_name(?,?) from dual"; 
$res = $this->ConnOBJ->prepare($stmt); 

$param1 = 1; 
$param2 = null; 

$res->bindParam(1,$param1,PDO::PARAM_INT); 
$res->bindParam(2,$param2,PDO::PARAM_NULL); 

$res->execute(); 
var_dump($res->fetchAll()); 

내가 데이터를 통과 할 때 지금은

PHP Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 932 OCIStmtFetch: ORA-00932: inconsistent datatypes: expected CHAR got DTYCWD (/var/www/php-5.3.3/ext/pdo_oci/oci_statement.c:467)' in /opt/web/dir/ora_class.php:216 Stack trace: #0 /opt/web/dir/ora_class.php(216): PDOStatement->fetchAll() #1 /opt/web/dir/ora_class.php(305): dbPDO->execPackage() #2 {main} thrown in /opt/web/dir/ora_class.php on line 216 

가 나는 확실히 모든 종류 맞아 제작하고 오류를 다시 얻을,하지만 난 여전히 같은 오류를 다시 얻고있다. null 값을 제거하고 문자열을 전달하고 pdo 유형을 PDO :: PARAM_STR로 변경했지만 여전히 오류가 발생합니다.

+0

글쎄, 스키마의 다른 테이블을 쿼리하고 결과 집합을 반환하므로 자격 증명이 작동합니다. – macha

+0

기능 세부 사항 –

+0

를 패키지에 게시 하시겠습니까? – macha

답변

1

PDO를 더 이상 사용하지 않아 OCI 드라이버를 사용하고 있습니다. 모든 도움을 주셔서 감사합니다.

1

함수가 하나의 매개 변수를 사용합니까? SQL * Plus에서는 두 개의 매개 변수를 전달합니다. PHP에서는 하나만 전달합니다. 함수에 두 개의 매개 변수가 필요하고 하나의 매개 변수 만 사용하는 오버로드 된 메서드가 없으면이 오류가 발생합니다.

+0

그럼 다른 하나를 통해 null을 전달하려고한다. 매개 변수에 대한 값만 전달합니다. 어떻게 처리합니까? – macha

+0

@macha - 두 번째 매개 변수에 NULL을 전달할 때와 똑같은 오류가 발생합니다. –

+0

글쎄, 실제로 방법 null 값을 바인딩하는 방법 지금은 다른 오류가 발생했습니다. – macha

관련 문제