【问题标题】:mssql pdo If Exists insert prepared statement in a loopmssql pdo If Exists 在循环中插入准备好的语句
【发布时间】:2012-09-17 05:02:29
【问题描述】:

我有一个准备好的语句,用于在之前不存在行的情况下插入行。如果只做一行,它工作正常。如果有两个,则添加第一行,忽略第二行。如果第一行存在而第二行不存在,则添加第二行并且所有后续行都失败。

有效地插入工作一次,就好像 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 的怪癖绑定准备好的语句的问题。

任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • 使用 bindValue 怎么样,因为你想每次都刷新值。

标签: php sql-server pdo


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 1970-01-01
    • 2013-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    相关资源
    最近更新 更多