2014-01-28 36 views
0

我嘗試插入一些數據與PHP和存儲過程。存儲過程正常工作,但僅適用於第一行。存儲過程中,只受影響只有第一行

PHP:

$sql = "SELECT * FROM [importliste_TCSv3]"; 

$stmt = sqlsrv_query($conn, $sql); 

if ($stmt === false) { 
    die (print_r(sqlsrv_errors(), true)); 
} 

while ($row = sqlsrv_fetch_array($stmt)) { 
    // print works fine without call proc 
    $query = "{call difInport(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}"; 
    $params = array("0gtp", $row["Kostenstelle"], $row["Vorname"], $row["Nachname"], $row["CI-Nummer"], $row["cmo_mon"], $row["Raum"], $row["Gebaeude"], $row["Bemerkung"], $row["Hardware"], $row["fmo_mon"], $row["Zubehoer"]); 

    $stmt = sqlsrv_query($conn, $query, $params); 

    if ($stmt === false) { 
     die (print_r(sqlsrv_errors(), true)); 
    } 
} 

存儲過程:

ALTER proc [dbo].[difInport] 
@mandant_id varchar(50), 
@kostenstelle varchar(50), 
@vorname varchar(50), 
@nachname varchar(50), 

@ci_nummer int, 
@anzahl_monitore_old int, 
@raum varchar(50), 
@gebäude varchar(50), 
@bemerkung text, 

@hardware_typ varchar(50), 
@anzahl_monitore_new varchar(50), 
@zubehör text 

as 

BEGIN 
    SET NOCOUNT ON; 

    DECLARE 
    @latestPersonID int, 
    @latestCmoID int, 
    @latestFmoID int 

    INSERT INTO [RC.Persons] (kostenstelle, vorname, nachname) VALUES (@kostenstelle, @vorname, @nachname); 
    SET @latestPersonID = (SELECT SCOPE_IDENTITY()) 

    INSERT INTO [RC.CMO] (ci_nummer, anzahl_monitore, raum, gebäude, bemerkung) values (@ci_nummer, @anzahl_monitore_old, @raum, @gebäude, @bemerkung); 
    SET @latestCmoID = (SELECT SCOPE_IDENTITY()) 

    INSERT INTO [RC.FMO] (hardware_typ, anzahl_monitore, zubehör) values (@hardware_typ, @anzahl_monitore_new, @zubehör); 
    SET @latestFmoID = (SELECT SCOPE_IDENTITY()) 

    INSERT INTO [RC.Persons_RC.CMO] (cmo_id, person_id) VALUES (@latestCmoID, @latestPersonID); 

    INSERT INTO [RC.Persons_RC.FMO] (fmo_id, person_id) VALUES (@latestFmoID, @latestPersonID); 

    INSERT INTO [RC.Persons_RC.Mandant] (person_id, mandant_id) VALUES (@latestPersonID, @mandant_id); 

END 

我讀了這個問題:Call mysql PROCEDURE inside while loop works only first time 但我不給任何結果集或者是一組聲明與選擇的結果問題?

回答

1

您正在覆蓋您的$stmt變量。更改您在while循環中使用的變量的名稱:

while ($row = sqlsrv_fetch_array($stmt)) { 
    // print works fine without call proc 
    $query = "{call difInport(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}"; 
    $params = array("0gtp", $row["Kostenstelle"], $row["Vorname"], $row["Nachname"], $row["CI-Nummer"], $row["cmo_mon"], $row["Raum"], $row["Gebaeude"], $row["Bemerkung"], $row["Hardware"], $row["fmo_mon"], $row["Zubehoer"]); 

    $stmt_proc = sqlsrv_query($conn, $query, $params); 

    if ($stmt_proc === false) { 
     die (print_r(sqlsrv_errors(), true)); 
    } 
} 
+0

熱鬧!你把我帶回來,沒有看到...... Thx男人! – mnlfischer

相關問題