我有以下查询:
$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
}
}