mssql pdo If Exists Insert vorbereitete statement in einer loop insert

Ich habe eine vorbereitete statement, die entworfen ist, um Zeile einzufügen, wenn eine Zeile noch nicht existiert hat. Wenn nur eine Zeile fertig ist, geht es gut. Wenn es zwei gibt, wird die erste Zeile hinzugefügt und die zweite ignoriert. Wenn die erste Zeile existiert und die zweite nicht, wird die zweite hinzugefügt und alle folgenden Zeilen fehlschlagen.

Effektiv funktioniert das Inserat einmal und es ist, als ob die IF NOT EXISTS nicht die Bindung der neuen Parameter aktualisiert.

Hier ist der Beispielcode:

$dbConn = 'mssql:host=' . $server . ';dbname=' . $base; $dbh = new PDO( $dbConn, $user, $pass); // Go through each course code and add it // Ignore if it already exists $stmt = $dbh->prepare('IF NOT EXISTS (SELECT * FROM _ExamCoursesTEMP WHERE ExamCourseCode = :examCode AND CourseCode = :courseCode ) BEGIN INSERT INTO _ExamCoursesTEMP ( ExamCourseCode, CourseCode ) VALUES ( :examCode2, :courseCode2 ) END'); $counter = 0; foreach( $courseCodes as $courseCode ) { $stmt->bindParam(':examCode', $examCode ); $stmt->bindParam(':courseCode', $courseCode ); $stmt->bindParam(':examCode2', $examCode ); $stmt->bindParam(':courseCode2', $courseCode ); $updateCount = $stmt->execute(); $counter++; } 

Der erste updateCount gibt 1 zurück und der Rest ist leer.

Ich bin mir nicht sicher, ob dies ein Problem mit meinem Code ist, die vorbereiteten Aussagebindungen, obwohl PDO oder ein quirk von mssql.

Jede Hilfe wäre willkommen.

Vielen Dank.

Der zweite Parameter zu bindParam wird als reference übergeben. So ist es nur notwendig, den Parameter einmal an die Variable zu binden und dann den Wert zu ändern, der dieser Variable in deiner loop zugeordnet ist.