Start · Sprachen · PHP · Referenz · cubrid_prepare

cubrid_prepare

Funktion

Bereitet ein SQL-Statement für die wiederholte Ausführung mit der CUBRID-Datenbank vor und gibt ein Statement-Handle zurück.

seit PHP 8.3.1 Kategorie: db

Signatur

cubrid_prepare(resource $conn_identifier, string $prepare_stmt, int $option = 0): resource|false

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

Typ
resource|false
Beschreibung
Gibt bei Erfolg ein Statement-Handle (Resource) zurück, das für 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);
?>
Eingefügt: Apfel (0.99 EUR) Eingefügt: Banane (0.49 EUR) Eingefügt: Kirsche (2.5 EUR)

// 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.