Pauschal würde ich sagen: Nutze Transaktionen.
Ich hab es mal so versucht:
$db->setAttribute(PDO::ATTR_AUTOCOMMIT, FALSE);
try {
$db->beginTransaction();
$stmt = $db->prepare("INSERT INTO lockbit (user_id, locked) VALUES (?, ?)");
$stmt->execute(array(11111111, 1));
$stmt = $db->prepare("INSERT INTO lockbit (user_ida, locked) VALUES (?, ?)");
$stmt->execute(array(11111111, 1));
$db->commit();
} catch(PDOException $e) {
$db->rollBack();
}
Dabei sollte das zweite INSERT INTO einen Fehler erzeugen (user_ida existiert nicht) und eigentlich doch das RollBack vollzogen werden oder?
Leider ist das nicht der fall. Es wird das erste INSERT INTO eingefügt, aber es findet kein rollBack statt.