1

ヘルプ。PDO を使用するために、古い mysql ライブラリのコードを変換しています。

いくつかの場所で、重複キーに違反がある可能性があることを十分に認識して INSERT を試みます。これで問題ありません。探して処理を続けます。すべて問題なく動作します。

1 つの場所で、ループして複数の項目を追加する必要があるため、パラメーター バインディングを使用して準備済みステートメントを使用しています。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();
}

}

少なくともそれが死んでいる理由を確認するために私が試みることができることについて何か提案はありますか?

4

0 に答える 0