将1种格式的值插入2个SQL Server表(PHP)(SQL-Server)

时间:2019-01-13 12:54:08

标签: php sql-server forms

我想使用一种形式插入到两个不同的Microsoft sql表中。我尝试使用2个插入物,但是没有用。

if (isset($_GET['submit'])) {
                $sth = $connection->prepare("INSERT INTO DB.dbo.Fehler (QualiID, TestaufstellungID, ModulinfoID, failAfter, Datum, Verbleib, DUTNr) VALUES ($QualiID, $TestaufstellungID,$ModulinfoID,'$failAfter','$Datum','$Verbleib','$DUTNr')");
                        echo "INSERT INTO DB.dbo.Fehler (QualiID, TestaufstellungID, ModulinfoID, failAfter, Datum, Verbleib, DUTNr) VALUES ($QualiID, $TestaufstellungID,$ModulinfoID,'$failAfter',$Datum,'$Verbleib','$DUTNr')";
                        $sth->execute();

                    if($sth)
                        {
                            echo "";
                        }
                        else
                        {
                            echo sqlsrv_errors();
                        }

$MID = $connection->prepare("MAX(MID) as MID FROM DB.dbo.Fehler WHERE DB.dbo.Fehler.TestaufstellungID = '". $TestaufstellungID . "'");
$MID->execute();

$sth2 = $connection->prepare("INSERT INTO DB.dbo.Fehlerinfo (MID, Tester, Test, Ausfallbedingungen, Fehlerbeschreibung, Ersteller) VALUES ($MID, '$Tester','$Test','$Ausfallbedingungen','$Fehlerbeschreibung','$Ersteller')");
$sth2->execute();

要了解 MID 是表 Fehler 的主键,并在第二个表 Fehlerinfo

中设置外键

这就是为什么我需要选择变通方法以获取最后一个MID并将其保存到变量$ MID中以将其插入第二张表中的原因。

有没有更聪明的解决方案?

2 个答案:

答案 0 :(得分:0)

正如我在评论中提到的,通常更好的方法是分批插入。这非常简化,但是应该向正确的方向发展。通常,您很可能在表值参数中传递外表的值(由于多对一关系),并将整个内容封装在<template name="choral"> <div class="container" style="padding-top: 25px"> {{#if subscriptionComplete}} <div class="table-responsive"> <form id="orderForm"> <table class="table table-borderless table-dark"> <thead class="thead-light"> <tr> <th>Title:</th> <th>See the Music:</th> <th>Hear the Music:</th> <th>Format:</th> <th>Price (per copy):</th> <th>Quantity:</th> </tr> </thead> <tbody> {{#each piece in pieces}} <tr> <td id="name">{{piece.name}}</td> <td id="pdf">PDF</td> <td id="audio">AUDIO</td> <td id="format">FORMAT</td> <td id="price">{{piece.score}}</td> <td id="qty"><input type ="number" name ="quantity" min="5"></td> </tr> {{/each}} </tbody> <tfoot> <tr> <td colspan="5"></td> <td><button class="button" type ="submit">Add to Cart</button></td> </tr> </tfoot> </table> </form> </div> {{else}} <div>Loading template...</div> {{/if}} </div> </template> 中,并可能存储在存储过程中。

我无法用PHP编写此代码,因为我对此非常了解,但这应该可以帮助您正确理解:

TRY...CATCH

答案 1 :(得分:0)

正如我提到的答案,它对我来说是很好的atm。

if (isset($_GET['submit'])) {
$failInsert = ("INSERT INTO DB.dbo.Fehler (QualiID, TestaufstellungID, ModulinfoID, failAfter, Datum, Verbleib, DUTNr) VALUES ($QualiID, $TestaufstellungID,$ModulinfoID,'$failAfter','$Datum','$Verbleib','$DUTNr')");
$failInsert .= ("INSERT INTO DB.dbo.Fehlerinfo (MID, Tester, Test, Ausfallbedingungen, Fehlerbeschreibung, Ersteller) VALUES (NULL, '$Tester','$Test','$Ausfallbedingungen','$Fehlerbeschreibung','$Ersteller')");
$failInsert .= ("UPDATE DB.dbo.Fehlerinfo SET DB.dbo.Fehlerinfo.MID = i.MID FROM (SELECT MAX(MID)as MID FROM DB.dbo.Fehler) i WHERE DB.dbo.Fehlerinfo.TestID = ( SELECT MAX(TestID) as TestID FROM DB.dbo.Fehlerinfo)"); 
$sth = $connection->prepare($failInsert);

$sth->execute();
        }