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가 이상한 일을 저지른다. (그것은 단지 정상적인 "제목은 이미 취해진 것"이라는 메시지를 보여주었습니다. 그것은 나를 바보로 만든 것입니다.)
100 % $ db 연결이 작동합니까? (http://stackoverflow.com/a/6263868/1063823) – Duikboot
[errorInfo] (http://php.net/manual/en/pdo.errorinfo.php)를 다른 단계에서 시험해보고 결과로 돌아 오십시오. 또한 [Oracle 오류 모니터링] (https://docs.oracle.com/cd/B28359_01/server.111/b28310/monitoring001.htm) –
"전후 [...를 읽으십시오.] 둘 다 나타나지 않습니다. "- http://php.net/manual/en/function.flush.php 참조 PHP/Webserver의 오류 로그 파일 표시 –