Signatur
Beschreibung
db2_execute() führt eine zuvor mit db2_prepare() vorbereitete SQL-Anweisung gegen eine IBM DB2-, Cloudscape- oder Apache-Derby-Datenbank aus. Dabei können Eingabeparameter (Platzhalter ?) direkt als Array übergeben werden, ohne dass zuvor db2_bind_param() aufgerufen werden muss.
Die Funktion ist besonders sinnvoll, wenn dieselbe SQL-Anweisung mehrfach mit verschiedenen Parametern ausgeführt werden soll, da der Parse- und Planungsaufwand des Datenbankservers nur einmalig anfällt. Dies verbessert die Performance bei Schleifen oder Batch-Operationen erheblich.
Parameterübergabe per Array schützt automatisch vor SQL-Injection, da die Werte separat vom SQL-Text an die Datenbank übermittelt werden. Für komplexere Szenarien (z. B. IN/OUT-Parameter bei Stored Procedures) kann alternativ db2_bind_param() verwendet werden, bevor db2_execute() ohne Parameter-Array aufgerufen wird.
Nach erfolgreichem Aufruf kann das Statement-Handle mit Funktionen wie db2_fetch_assoc(), db2_fetch_array() oder db2_fetch_object() zum Abrufen von Ergebniszeilen verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $stmt Pflicht | resource | Ein vorbereitetes Statement-Handle, das zuvor von db2_prepare() zurückgegeben wurde. |
|
| $parameters | array | [] | Ein indiziertes Array mit Werten für die ?-Platzhalter der vorbereiteten Anweisung. Die Reihenfolge muss der Reihenfolge der Platzhalter im SQL-String entsprechen. Wird das Array weggelassen, müssen Parameter zuvor über db2_bind_param() gebunden worden sein. |
Rückgabewert
true zurück, wenn die Anweisung erfolgreich ausgeführt wurde, andernfalls false. Im Fehlerfall können mit db2_stmt_error() und db2_stmt_errormsg() nähere Informationen abgerufen werden.Beispiele
Einfügen mehrerer Datensätze mit Schleife
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');
if ($conn) {
$sql = 'INSERT INTO employees (first_name, last_name, salary) VALUES (?, ?, ?)';
$stmt = db2_prepare($conn, $sql);
if ($stmt) {
$employees = [
['Max', 'Mustermann', 45000.00],
['Erika', 'Musterfrau', 52000.00],
['Klaus', 'Beispiel', 39500.00],
];
foreach ($employees as $emp) {
$result = db2_execute($stmt, $emp);
if (!$result) {
echo 'Fehler: ' . db2_stmt_errormsg($stmt) . PHP_EOL;
}
}
echo 'Alle Datensätze eingefügt.' . PHP_EOL;
}
db2_close($conn);
}
SELECT-Abfrage mit Parameter und Ergebnisverarbeitung
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'geheim');
if ($conn) {
$sql = 'SELECT first_name, last_name, salary FROM employees WHERE salary > ?';
$stmt = db2_prepare($conn, $sql);
if ($stmt) {
$minSalary = 40000.00;
$result = db2_execute($stmt, [$minSalary]);
if ($result) {
while ($row = db2_fetch_assoc($stmt)) {
printf(
"%s %s — Gehalt: %.2f EUR\n",
$row['FIRST_NAME'],
$row['LAST_NAME'],
$row['SALARY']
);
}
} else {
echo 'Fehler beim Ausführen: ' . db2_stmt_errormsg($stmt);
}
}
db2_close($conn);
}
// Wichtig · Fallstricke
Sicherheit: Parameter, die als Array an db2_execute() übergeben werden, schützen zuverlässig vor SQL-Injection, da der Datenbankserver Daten und SQL-Logik strikt trennt. Niemals Benutzereingaben direkt in einen SQL-String interpolieren.
Stored Procedures / IN-OUT-Parameter: Bei Prozeduren mit Ausgabeparametern muss db2_bind_param() mit dem Typ DB2_PARAM_OUT oder DB2_PARAM_INOUT verwendet werden; das Parameter-Array von db2_execute() unterstützt nur Eingabewerte.
Ressourcen-Verwaltung: Statement-Handles bleiben nach dem Aufruf wiederverwendbar. Erst nach dem abschließenden Einsatz sollten sie mit db2_free_stmt() freigegeben werden, um Ressourcen zu schonen.
Fehlerbehebung: Gibt die Funktion false zurück, liefern db2_stmt_error() den SQLSTATE-Code und db2_stmt_errormsg() eine lesbare Fehlerbeschreibung.