2012-08-04 3 views
0

PDO (PHP)를 사용하여 저장 프로 시저 (MYSQL)의 결과를 얻지 못하는 것 같습니다.PDO를 통해 저장된 프로 시저 결과 얻기 PHP

저장 프로 시저 :

CREATE PROCEDURE getUserId(serviceId VARCHAR(64), serviceInput VARCHAR(32)) 
BEGIN 
    SELECT id FROM users WHERE servid = serviceId AND service = serviceInput; 
END 

PHP 코드 :

$mysqlConn = mysqlPDOLogin(); 
$stmt = $mysqlConn->prepare("CALL getUserId(?,?);"); 
$stmt->bindParam(1, $USERID); 
$stmt->bindParam(2, $USERPROVIDER); 
$stmt->execute(); 
$returned_a = $stmt->fetch(); 
echo $returned_a['id']; 

그것은 아무것도 돌아 나던. 필자는 저장 프로 시저에서 기본 선택 코드를 복사하여 PHP 코드에서 직접 사용했지만 작동하지만 저장 프로 시저를 통해 작동하지 않습니다.

도움이 되시면 ...

답변

0

명백한 오류 검사를 수행하고 있지 않습니다. Prepared(), bindParam() 및 execute()는 PDO가있는 오류보고 모드에 따라 false를 반환하거나 예외를 throw하여 오류를 경고합니다.

"return false"모드.

$ stmt가 PDOStatement 객체이고 bindParam 문이 false를 반환하지 않았으며 실행이 false를 반환하지 않았는지 확인해야합니다. 그 중 하나라도 수행 한 경우 errorCode() 및 errorInfo()를 사용하여 잘못된 내용을 찾아야합니다.

또한 기본적으로 간단한 쿼리 인 스토어드 프로 시저를 사용하는 것이 다소 과도한 것처럼 보입니다. 왜 그냥 다음을 수행하지 않습니까?

$stmt = mysqlConn->prepare ('SELECT id FROM users WHERE servid = ? AND service = ?'); 
+0

도움 주셔서 감사합니다. 거짓 표시 없음 .. 오류 (echo) ($ stmt-> errorCode())를 사용하여 오류를 확인했습니다. 나는 전에 이와 비슷한 것을 가지고 있었지만 pdo 대신 mysqli를 사용하고 있었고 바인딩 결과에 대해 불만을 나타 냈습니다 (아마 결과 집합을 얻지 못해서 였을 것입니다.)하지만 나는 그것에 대해 신경 쓰지 않고 끝내야했습니다. PDO를 사용하는 다른 프로젝트에서 동일한 문제가 발생하면 저장 프로 시저에서 아무 것도 얻을 수 없습니다. 추신 : 보안상의 이유로 거대한 저장 프로 시저를 게시하고 싶지 않으며 질문에 답하는 것을 복잡하게 만듭니다. –