Obwohl es nicht möglich ist, "INSERT IGNORE" zu verwenden, gibt es eine Möglichkeit, dies in PHP zu umgehen. Etwas wie das:
try {
$insertID = db_insert('crawl_data')->fields(array(
'url' => $url,
))->execute();
} catch (Exception $ex) {
}
In diesem Beispiel habe ich eine Datenbank mit "URLs". Aber ich möchte nicht zuerst überprüfen, ob sich das Element in der Datenbank befindet. Ich möchte, dass es auf einmal passiert. Dies ist also ungefähr das gleiche Verhalten wie "Einfügen ignorieren".
Es ist jedoch im Allgemeinen schlecht, dies zu haben:
catch (Exception $ex) {
// open space
}
Es könnte also besser sein, dies zu tun:
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;
}
}
Entweder dies oder zwei Datenbankabfragen.