我有一个准备好的语句,用于在以前不存在行的情况下插入行。如果只做一行,效果很好。如果有两个,则添加第一行,忽略第二行。如果第一行存在而第二行不存在,则添加第二行,然后所有后续行都将失败。
实际上,insert只工作一次,就好像if not exists不更新新参数的绑定一样。
下面是示例代码:

$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++;
}

第一个updateCount返回1,其余的都是空的。
我不确定这是否是我的代码、通过pdo准备好的语句绑定或mssql的一个怪癖的问题。
任何帮助都将不胜感激。
谢谢。

最佳答案

bindParam的第二个参数通过引用传递。因此,只需要将参数绑定到变量一次,然后在循环中更改分配给该变量的值。

10-04 19:33