PDO重复插入循环

时间:2013-09-14 11:03:22

标签: php mysql loops error-handling pdo

帮助。我正在从旧的mysql库中转换一些代码来使用PDO。

在一些地方,我们尝试INSERT完全知道可能存在违反重复密钥的情况。这很好,我们寻找并继续处理。所有这一切都没有问题。

在一个地方,我们必须遍历并添加多个项目,因此我使用带参数绑定的预准备语句。如果我们在INSERT上没有遇到任何重复,它可以正常工作。但是,如果存在重复的密钥冲突,则以下PDO-> execute()将无提示失败,无异常,无任何内容。

这是我目前的代码:

<?php
$db = new PDO("mysql:host=localhost;dbname=".$dbname, $mysqluser, $mysqlpwd,
                array(PDO::ATTR_EMULATE_PREPARES => false,      
                      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

$stmt = $db->prepare("insert into trials (uid,name,start_date,expire_date) values (:uid,:node,FROM_UNIXTIME(:start),FROM_UNIXTIME(:end))");
$stmt->bindValue(':uid', $uid, PDO::PARAM_STR);
$stmt->bindParam(':node', $node, PDO::PARAM_STR);
$stmt->bindValue(':start', $start);
$stmt->bindValue(':end', $end);

foreach ($nodes as $node) {
    if (isfreenode($node))
        continue;

    try {
        $stmt->execute();  // <-- This is where it fails
    } catch (exception $e) {
        $errorInfo = $stmt->errorInfo();
        if ($errorInfo[1] = 1062) {
            print "Trial already exists (" . $node . ") - skipping <br/>";
        } else {
            throw $e;
        }
        $stmt->closeCursor();
        continue;
    }
    print "Started Trial ( " . $uid . " , " . $node . " )" . "<br/>";
    removeRevocation($uid, $node);
    $stmt->closeCursor();
}

}

关于我可以尝试至少看到它为何会死的原因的任何建议?

0 个答案:

没有答案