mysql查询错误没有重复-但如何使它跳过错误并继续执行其他查询


mysql query errors out with no-duplicate - but how to make it skip over the error and continue with execution of other?

我有以下查询:

$stmt_2 = $conn->prepare('INSERT INTO connections (user_id, word_id, order_id, lang, created) VALUES (:user_id, :word_id, :order_id, :lang, :created)');
        $order_99 = 99;
        $now = date("Y-m-d H:i:s");
        foreach ($insert_id as $word_id) {
            $stmt_2->execute(array(
                ':user_id'  => $user_id,
                ':word_id'  => $word_id,
                ':order_id' => $order_99,
                ':lang'     => 'en',
                ':created'  => $now
            ));
            $order_99 ++;
        }
echo $stmt_2->rowCount(); // 1

我已经设置了无重复的数据库。因此,当出现重复时会出现错误:

ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-108' for key 'No duplicates'

问题是,不是$insert_id中的所有数组项都是重复的。

因此,我希望执行继续,而不是失败的非重复。我该怎么做?这肯定有一个机制吗?

问题是,一旦出现错误,脚本就会崩溃(更重要的是:foreach循环将中断)。您可以通过手动捕获异常来避免这种行为,例如下面的

foreach ($insert_id as $word_id) {
    try {
        $stmt_2->execute(array(
            ':user_id'  => $user_id,
            ':word_id'  => $word_id,
            ':order_id' => $order_99,
            ':lang'     => 'en',
            ':created'  => $now
        ));
        $order_99++;
    } catch (Exception $e) {
        //do nothing
    }
}