首页 > 解决方案 > 在事务中使用 PHP PDO 获取存储过程 OUT 参数的值

问题描述

我试图在插入后检索 ID 的值。我正在使用 2 个存储过程来完成此操作。由于某种原因,我无法获取 out 参数的值。我不断收到一条错误消息,内容为

SQLSTATE [42S22]:未找到列:1054 '字段列表'中的未知列 'lkjlkjlkjlkj'

这是我创建的方法。

function addTopicLesson(Topic $topic, Lesson $lesson)
{
    $isSuccessful = false;
    $this->connection->beginTransaction(); //start transaction
    try{
        $lessonNo = $lesson->getLessonNo();
        $lessonTitle = $lesson->getLessonTitle();
        $sp_addLesson = $this->connection->prepare( "CALL addLesson($lessonNo,$lessonTitle, @lessonId)");
        $sp_addLesson->execute();
        $sp_addLesson->closeCursor();

        $lessonId =$this->connection->query("select @lessonId")->fetch(PDO::FETCH_ASSOC);
        //var_dump($lessonId);

        $topicId = $topic->getTopicId();
        $sp_addTopicLesson = $this->connection->prepare("CALL addTopicLesson($topicId,$lessonId)");
        $sp_addTopicLesson->execute();
        $this->connection->commit(); //commit
        $isSuccessful = true;
    }catch(PDOException $e){
        echo $e->getMessage();
        $this->connection->rollBack();
    }
    return $isSuccessful;
}

还有我的存储过程,

CREATE DEFINER=`root`@`localhost` PROCEDURE `addTopicLesson`(`pTopicId` INT, `pLessonId` INT)
BEGIN

INSERT INTO topic_lesson(topic_id, lesson_id)
VALUES(pTopicId,pLessonId);

END

这是“ addLesson ”存储过程。

CREATE DEFINER=`root`@`localhost` PROCEDURE `addLesson`(`pLessonNo` INT, `pLessonTitle` VARCHAR(255), OUT opLessonId INT)
BEGIN

INSERT INTO lesson (lesson_no, lesson_title)
VALUES(pLessonNo,pLessonTitle);

SELECT LAST_INSERT_ID() INTO opLessonId;

SELECT opLessonId AS opLessonId;

END

我将不胜感激任何建议或更正。

谢谢你。

标签: phppdo

解决方案


推荐阅读