echo $begrüßung;
Mittlerweile hab ich das Problem erfolgreich nachgestellt. Es sieht so aus, als ob PDO die Verschachtlung nicht verkraftet, und nicht merkt, dass der Fehler zum inneren Statement gehört.
Wenn du zuerst mit fetchAll() die komplette Ergebnismenge abholst, dann darüber iterierst (foreach) und dabei das INSERT ausführst, kommt die extra Exception nicht mehr.
Eine Frage bleibt aber:
$result = $DBO->query("SELECT dep_name FROM departments") or warning($DBO);
while ($row = $result->fetch()) {
if (strtoupper($d_name) != strtoupper($row['dep_name'])) {
try {
$DBO->exec("INSERT INTO departments (dep_name) VALUES ('$d_name')");
$DepartmentsID = $DBO->lastInsertId();
} catch(PDOException $e) {
print "Error / FEHLER!: " . $e->getMessage() . "<br/>";
}
} else {
$department_check = "same";
}
}//while
Welche Aufgabe hat dieses Codestück eigentlich? Ich sehe je eine Zuweisung an $DepartmentsID und an $department_check innerhalb der Schleife, doch ihre Werte werden gar nicht verwendet. Stattdessen kann es vorkommen, dass sie ein paar Mal einfach nur neu gesetzt werden.
Mir scheint, das Konstrukt soll nur dann etwas einfügen, wenn es bisher noch nicht vorkam. Wenn dem so ist, tät ich das wohl ungefähr so machen:
if ((INSERT IGNORE INTO departments (dep_name) VALUES($d_name))->rowCount())
// eingefügt
else
// schon vorhanden
oder (ohne IGNORE)
try
INSERT INTO departments (dep_name) VALUES($d_name)
// eingefügt
catch
// schon vorhanden
oder
if ((SELECT count(*) ... WHERE dep_name = $d_name)->fetchColumn(0))
// schon vorhanden
else
INSERT INTO departments (dep_name) VALUES($d_name)
// eingefügt
echo "$verabschiedung $name";