>

대부분의 쿼리에 대해 저장 프로 시저를 사용해야하고 저장 프로 시저를 사용한 적이 없어야하는 플랫폼 (완벽한 형식)을 사용하고 있는데, 내가 뭘 잘못하고 있는지 파악할 수 없습니다. 다음 문장은 오류없이 실행됩니다 :

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.test_proc//
CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
DELIMITER ;

그러나 다음을 사용하여 호출하려고 할 때 :

CALL test_proc();

다음 오류가 발생합니다 :

#1312 - PROCEDURE test_db.test_proc can't return a result set in the given context

php_admin 3.2.4, PHP Version 5.2.12에서이 문장을 실행하고 있으며 mysql 서버 버전은 5.0.89-community입니다.

매개 변수를 반환하는 저장 프로 시저를 작성한 다음 선택하면 제대로 작동합니다 (예 :).

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.get_sum//
CREATE PROCEDURE test_db.get_sum(out total int)
BEGIN
SELECT SUM(field1) INTO total FROM test_db.test_table;
END //
DELIMITER ;

잘 작동하고 전화하면 :

CALL get_sum(@t); SELECT @t;

총액에 문제가 없습니다.

궁극적으로, 내가해야 할 일은 저장 프로 시저에 싸인 멋진 SELECT 문을 가지고 있으므로 호출하고 여러 필드의 여러 행을 반환 할 수 있습니다. 지금은임의의작업을 선택하려고합니다.

도움을 주시면 감사하겠습니다.


  • 답변 # 1

    알았다. 이것은 PHP의 버그가 아닙니다. (이전의 경우 였지만) phpmyadmin의 일부 버전에서는 버그입니다. 동일한 버그가 간헐적으로 다시 나타난 후 다양한 하위 버전에서 수정되었습니다 (위 참조).

    #1312 - PROCEDURE [name] can't return a result set in the given context
    
    

    이 동작은phpmyadmin 내의 저장 프로 시저 내의 SELECT 문으로 제한됩니다.

    MySQL Workbench와 같은 클라이언트를 사용하면이 문제를 해결할 수 있습니다 (또는 phpmyadmin을 업그레이드 할 수는 있지만 나처럼 공유 서버를 사용하는 경우 고통 스럽습니다).

    어쨌든 여러분의 도움에 감사합니다.

  • 답변 # 2

    이것이보고 된 버그인지 확인하려면 PHP 버전을 확인하십시오 (여기 참조).

    이 포스트를보십시오 : 주어진 컨텍스트에서 결과 집합을 반환 할 수 없습니다

  • 답변 # 3

    이것은 아마도 저장 프로 시저/루틴 내에서 PHP와 SELECT를 다루는 버그를 중심으로합니다. 가능한 해결 방법 중 하나는 저장 프로 시저 내부에서선택 ... INTO를 사용하여 결과를 하나의 변수로 가져 오는 것입니다. 이것은 내가 읽은 다른 경우에도 효과가있었습니다.

      SELECT * FROM category INTO c;
    
    

  • 답변 # 4

    다음을 실행할 때 :

    DELIMITER //
    DROP PROCEDURE IF EXISTS test_db.test_proc//
    CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
    DELIMITER ;
    
    

    다음에

    CALL test_db.test_proc();
    
    

    다음과 같은 결과 집합을 보여줍니다 :

    +-----+
    | foo |
    +-----+
    | foo |
    +-----+
    
    

    PHP 5.3.1, phpMyAdmin 3.2.4에서 MySQL 5.1.41을 사용하고 있습니다.

    아마도 방금 프로 시저 이름의 철자가 틀렸습니까?
    아니면 PHP 또는 MySQL 설치에 문제가있을 수 있습니까? (아마도 버그 일 수 있습니다. 최신 버전으로 업데이트 해 보셨습니까?)

관련 자료

  • 이전 XSLT 10을 사용한 토큰 화 및 정렬
  • 다음 javascript - jquery - 아약스 응답에서 스크립트 평가