Mặc dù không thể sử dụng "INSERT IGNORE", nhưng có một cách bạn có thể giải quyết vấn đề này trong PHP. Một cái gì đó như thế này:
try {
$insertID = db_insert('crawl_data')->fields(array(
'url' => $url,
))->execute();
} catch (Exception $ex) {
}
Trong ví dụ này tôi có một cơ sở dữ liệu về "url". Nhưng trước tiên tôi không muốn kiểm tra xem mục đó có trong cơ sở dữ liệu không. Tôi muốn nó xảy ra trong một lần. Vì vậy, đây là loại hành vi tương tự như "chèn bỏ qua".
Tuy nhiên, nói chung là rất tệ khi có điều này:
catch (Exception $ex) {
// open space
}
Vì vậy, nó có thể tốt hơn để làm điều này:
catch (Exception $ex) {
$error = $ex->getMessage();
if (strpos($error, 'SQLSTATE[23000]: Integrity constraint violation') !== false) {
// then we know it's an error we can ignore
}
else {
// just throw the error again
throw $e;
}
}
Đó là cái này hoặc làm hai truy vấn cơ sở dữ liệu.