2016-05-31 4 views
1

PDO를 사용하여 준비된 명령문에서 execute를 호출 할 때 문제가 있습니다. 여기 PDO 실행 문이 멈춤

내 코드입니다 : 내가 줄을 주석 경우

 $db = Connection::getConnection(); 

     $query = 'INSERT INTO stories (st_title, st_authors, st_content, st_cover) VALUES (?,?,?,?)'; 

     $params = ['title', 'Authors', 'content', 'cover']; 

     $stmt = $db->prepare($query); 

     echo "before <br>"; 
     $stmt->execute($params); 
     echo "after <br>"; 

은 $ stmt-> ($ PARAMS)을 실행;, "이전"과 "이후"가 모두 표시됩니다. 그러나 내가 주석을 달지 않은 채두면 둘 중 아무 것도 나타나지 않습니다.

또한 배열로 실행하는 대신 bindParam()을 사용하여 시도했지만 동일한 결과가 나타납니다. sqlPlus에서 똑같은 매개 변수로 데이터베이스에 삽입하는 것이 완벽하게 작동한다는 점에 유의할 필요가 있습니다.

oracle 11g 데이터베이스 서버를 로컬로 실행하고 있습니다.

도움이 되었으면 좋겠습니다. 잠시 동안이 문제에 봉착했습니다.

편집 : 제목에 언급했지만 잊어 버렸습니다. 이 코드가 실행되면 서버가 무기한 정지되고 Apache를 다시 시작해야합니다.

Edit2 : 연결이 정상이며 문제의 원인을 파악했습니다. 스토리 테이블에서 st_title에 대한 고유 제한 조건이 있습니다. 이전 제목이 삭제 된 후 이전 제목과 같은 제목으로 이야기를 삽입하려고하면이 문제가 발생합니다. 고유 제한 조건을 제거하면 문제가 해결됩니다.

그러나 나는 그 제약 조건을 유지하고 싶습니다. 이 문제를 일으킬 수있는 아이디어는 무엇입니까?

EDIT3 : 나는 이야기를 테이블에있는 트리거 :

--auto-increment on st_id-- 
DROP SEQUENCE stories_id_seq; 
CREATE SEQUENCE stories_id_seq; 

CREATE OR REPLACE TRIGGER stories_id_auto_inc 
BEFORE INSERT ON stories 
FOR EACH ROW 
BEGIN 
    SELECT stories_id_seq.NEXTVAL 
    INTO :new.st_id 
    FROM dual; 
END; 
/

--auto-completion for st_date_added-- 
CREATE OR REPLACE TRIGGER stories_date_added 
BEFORE INSERT ON stories 
FOR EACH ROW 
BEGIN 
    SELECT sysdate 
    INTO :new.st_date_added 
    FROM dual; 
END; 
/

CREATE OR REPLACE TRIGGER stories_delete 
BEFORE DELETE 
    ON stories 
    FOR EACH ROW 
DECLARE 
BEGIN 
    DELETE FROM st_cat 
    WHERE st_id = :old.st_id; 

    -- DELETE FROM characters 
    -- WHERE st_id = :old.st_id; 

    DELETE FROM favourites 
    WHERE st_id = :old.st_id; 

    DELETE FROM bookmarks 
    WHERE st_id = :old.st_id; 

    DELETE FROM comments 
    WHERE st_id = :old.st_id; 

    DELETE FROM ratings 
    WHERE st_id = :old.st_id; 
END; 
/

마지막 하나는 내가 생각에만 해당 하나입니다,하지만 난 단지의 경우, 그들 모두를 기록했다.

이 문제는 PDO에서만 발생합니다. sqlplus에서 동일한 작업을 수행하면 올바르게 작동합니다.

해결 : 사실, 내 코드에는 문제가되지 않았지만, 커밋을하지 않은 것은 사실입니다. 행 삭제 후 sqlplus에서 PDO가 이상한 일을 저지른다. (그것은 단지 정상적인 "제목은 이미 취해진 것"이라는 메시지를 보여주었습니다. 그것은 나를 바보로 만든 것입니다.)

+0

100 % $ db 연결이 작동합니까? (http://stackoverflow.com/a/6263868/1063823) – Duikboot

+0

[errorInfo] (http://php.net/manual/en/pdo.errorinfo.php)를 다른 단계에서 시험해보고 결과로 돌아 오십시오. 또한 [Oracle 오류 모니터링] (https://docs.oracle.com/cd/B28359_01/server.111/b28310/monitoring001.htm) –

+0

"전후 [...를 읽으십시오.] 둘 다 나타나지 않습니다. "- http://php.net/manual/en/function.flush.php 참조 PHP/Webserver의 오류 로그 파일 표시 –

답변

0

아마 데이터베이스 연결이 제대로 설정되지 않았습니다.

연결이 안정적인지 그리고이 연결에 대한 쿼리를 성공적으로 수행 할 수 있는지 확인하려면이 게시물을보십시오.

PDO Connection Test