Signatur
Beschreibung
cubrid_prepare() sendet ein SQL-Statement an den CUBRID-Datenbankserver und bereitet es für die spätere Ausführung vor. Das Ergebnis ist ein Statement-Handle (Resource), das mit cubrid_bind() und cubrid_execute() weiterverwendet werden kann.
Das Prepared-Statement-Konzept ist besonders nützlich, wenn dasselbe SQL-Statement mehrfach mit unterschiedlichen Parameterwerten ausgeführt werden soll. Der Parsing- und Optimierungsaufwand entfällt bei jeder weiteren Ausführung, was die Performance verbessert. Außerdem werden Eingabewerte automatisch als Daten behandelt, was SQL-Injection wirksam verhindert.
Als optionaler Parameter $option kann CUBRID_INCLUDE_OID übergeben werden, um OID-Informationen (Object Identifier) in die Ergebnismenge einzuschließen – dies ist nützlich bei objektorientierten CUBRID-Abfragen.
Nach Verwendung sollte das Handle mit cubrid_close_prepare() oder cubrid_close_request() freigegeben werden, um Ressourcen zu schonen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $conn_identifier Pflicht | resource | Die CUBRID-Verbindungsressource, die zuvor mit cubrid_connect() oder cubrid_connect_with_url() geöffnet wurde. |
|
| $prepare_stmt Pflicht | string | Das SQL-Statement, das vorbereitet werden soll. Platzhalter für Parameter werden mit ? angegeben, z. B. SELECT * FROM users WHERE id = ?. |
|
| $option | int | 0 | Optionales Flag. Aktuell wird CUBRID_INCLUDE_OID unterstützt, um OID-Informationen in die Ergebnismenge aufzunehmen. Standardmäßig 0 (kein besonderes Verhalten). |
Rückgabewert
cubrid_bind() und cubrid_execute() verwendet werden kann. Im Fehlerfall wird false zurückgegeben.Beispiele
Einfaches Prepared Statement mit Parameterbindung
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
if (!$conn) {
die('Verbindung fehlgeschlagen: ' . cubrid_error());
}
$sql = "SELECT name, email FROM users WHERE age > ? AND active = ?";
$stmt = cubrid_prepare($conn, $sql);
if (!$stmt) {
die('Prepare fehlgeschlagen: ' . cubrid_error($conn));
}
cubrid_bind($stmt, 1, 18, 'INT');
cubrid_bind($stmt, 2, 1, 'INT');
cubrid_execute($stmt);
while ($row = cubrid_fetch_assoc($stmt)) {
echo $row['name'] . ' – ' . $row['email'] . PHP_EOL;
}
cubrid_close_request($stmt);
cubrid_disconnect($conn);
?>
Wiederholte Ausführung mit verschiedenen Parametern
<?php
$conn = cubrid_connect('localhost', 33000, 'demodb', 'dba', '');
$sql = "INSERT INTO products (name, price) VALUES (?, ?)";
$stmt = cubrid_prepare($conn, $sql);
if (!$stmt) {
die('Prepare fehlgeschlagen: ' . cubrid_error($conn));
}
$products = [
['Apfel', 0.99],
['Banane', 0.49],
['Kirsche', 2.50],
];
foreach ($products as [$name, $price]) {
cubrid_bind($stmt, 1, $name, 'STRING');
cubrid_bind($stmt, 2, $price, 'DOUBLE');
$result = cubrid_execute($stmt);
if ($result) {
echo "Eingefügt: $name ($price EUR)" . PHP_EOL;
}
}
cubrid_close_request($stmt);
cubrid_disconnect($conn);
?>
// Wichtig · Fallstricke
SQL-Injection-Schutz: Durch die Verwendung von Prepared Statements mit Platzhaltern (?) und cubrid_bind() werden Benutzereingaben niemals direkt in das SQL-Statement eingebettet, was SQL-Injection-Angriffe wirksam verhindert. Verzichte daher auf das direkte Einsetzen von Variablen in den SQL-String.
Ressourcenverwaltung: Das von cubrid_prepare() zurückgegebene Handle belegt Serverressourcen. Schließe es nach der Verwendung immer mit cubrid_close_request() oder cubrid_close_prepare(), besonders in Schleifen oder lang laufenden Skripten.
Fehlerbehandlung: Im Fehlerfall gibt die Funktion false zurück. Prüfe das Ergebnis immer und verwende cubrid_error() bzw. cubrid_errno(), um die Fehlerursache zu ermitteln.