【问题标题】:PDO execute statement hangsPDO 执行语句挂起
【发布时间】:2016-09-29 06:27:39
【问题描述】:

我在使用 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->execute($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 对它们产生了奇怪的影响。 (它不只是向我显示正常的“标题已被占用”消息,这是愚弄我的原因)。

【问题讨论】:

标签: php oracle apache pdo


【解决方案1】:

可能您的数据库连接设置不正确。

看看这篇文章,看看你的连接是否稳定,你是否可以成功地对其进行查询。

PDO Connection Test

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 2019-09-16
    • 2014-06-10
    • 1970-01-01
    相关资源
    最近更新 更多