Вставить в несколько таблиц с помощью PHP: PDO на MSSQL - PullRequest
0 голосов
/ 14 марта 2011

Я пытаюсь написать функцию php, которая собирается поместить значения в две разные таблицы, но она не работает. Как мне быть?

public function AddKursplanering($kursBudgetId, $momentId, $momTypID, $pId, $rollId, $tid, $utfall)
{
    if($stmt = $this->m_database->GetPrepareStatement(" INSERT INTO Kursmoment(KBID, MomentID, MomTypID) 
                                                                VALUES(:kursBudgetId, :momentId, :momTypID)
                                                        INSERT INTO Uppgift (KMID, PID, RollID, Tid, Utfall) 
                                                                VALUES (@@IDENTITY, :pId, :rollId, :tid, :utfall)"))
    {
        $stmt->bindValue(':kursBudgetId', $kursBudgetId,PDO::PARAM_INT);
        $stmt->bindValue(':momentId', $momentId,PDO::PARAM_INT);
        $stmt->bindValue(':momTypID', $momTypID,PDO::PARAM_INT);
        $stmt->bindValue(':pId', $pId,PDO::PARAM_INT);
        $stmt->bindValue(':rollId', $rollId,PDO::PARAM_INT);
        $stmt->bindValue(':tid', $tid,PDO::PARAM_INT);
        $stmt->bindValue(':utfall', $utfall,PDO::PARAM_INT);
        if($stmt->execute())
        {
            $stmt->CloseCursor();
            return true;
        }
        return false;
    }
}

Ответы [ 2 ]

0 голосов
/ 14 марта 2011

Не зная сообщения об ошибке из вышеприведенного запроса, похоже, что между утверждениями необходимо использовать точку с запятой. Без этого он будет интерпретироваться как один запрос вместо двух.

if($stmt = $this->m_database->GetPrepareStatement("
  INSERT INTO Kursmoment(KBID, MomentID, MomTypID) 
    VALUES(:kursBudgetId, :momentId, :momTypID);
  INSERT INTO Uppgift (KMID, PID, RollID, Tid, Utfall)
    VALUES (@@IDENTITY, :pId, :rollId, :tid, :utfall)"))
0 голосов
/ 14 марта 2011
  • Если вы получаете сообщение об ошибке, опубликуйте текст ошибки
  • Если это не ошибка, но по какой-то причине она не работает, четко укажите, какая часть не работает

Теперь это должно сработать, но используйте SCOPE_IDENTITY() вместо @@IDENTITY, что может вернуть вам не связанный номер, если задействованы триггеры.

Кроме того, рассмотрите возможность инкапсуляции такой логики в хранимой процедуре с параметрами, чтобы вы могли вызвать один процесс, который выполняет обе вставки (по сути, один и тот же код)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...