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/Webサーバのエラーログファイルを表示 –