使用PHP插入多个表:MSSQL上的PDO

时间:2011-03-14 01:39:05

标签: php sql pdo

我正在尝试编写一个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 :(得分:0)

  • 如果收到错误,请发布错误文本
  • 如果不是错误,但由于某种原因无法正常工作,请明确说明哪部分不起作用

现在,这实际上应该有效,但使用SCOPE_IDENTITY()代替@@IDENTITY,如果涉及触发器,可能会返回无关的数字。

另外,考虑使用参数将这样的逻辑封装在存储过程中,这样就可以调用同时执行两个插入的单个proc(基本上是相同的代码)

答案 1 :(得分:0)

在不知道上面查询的错误消息的情况下,您需要在语句之间使用分号。没有它,它将被解释为一个查询而不是两个。

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)"))