Bei vorhandener Verbindung wird die Abfrage zunächst für die weitere Verwendung vorbereitet (oci_parse) und anschließend ausgeführt (oci_execute). Aus dem Ergebnis können dann mit oci_fetch_* die jeweiligen Daten geholt werden. Nach Abschluss der Abfrage geben wir noch mit oci_free_statement den Speicher frei (Listing 7).
<?php . $stmt = oci_parse($conn, 'SELECT LAST_NAME, FIRST_NAME, PHONE_NUMBER FROM EMPLOYEES ORDER BY LAST_NAME ASC'); oci_execute($stmt); while ($row = oci_fetch_assoc($stmt)) { printf('%s, %s: %s ', $row['LAST_NAME'], $row['FIRST_NAME'], $row['PHONE_NUMBER']); } oci_free_statement($stmt); . ?>
Ergebnis
Abel, Ellen: 011.44.1644.429267 Ande, Sundar: 011.44.1346.629268 Atkinson, Mozhe: 650.124.6234 Austin, David: 590.423.4569 Baer, Hermann: 515.123.8888 Baida, Shelli: 515.127.4563 ...
CREATE TABLE LOB_TABLE ( LOB_COL CLOB ); INSERT INTO LOB_TABLE (LOB_COL) VALUES ('foo bar'); . <?php . $stmt = oci_parse($conn, 'SELECT LOB_COL FROM LOB_TABLE'); oci_execute($stmt); while ($row = oci_fetch_assoc($stmt)) { printf('%s ', $row['LOB_COL']); } . ?>
array(1) { ["LOB_COL"]=> object(OCI-Lob)#1 (1) { ["descriptor"]=> resource(4) of type (oci8 descriptor) } }
<?php ... printf('%s ', $row['LOB_COL']->load()); . ?> foo bar
Überschreiten der Höchstgeschwindigkeit
Wenn man nun sehr viele Abfragen verwendet, wird man sich danach sehnen, diese Abfragen zu beschleunigen. Jetzt kann man natürlich versuchen, die Datenbank oder die SQL-Abfragen zu optimieren, um einen Geschwindigkeitszuwachs zu erreichen. Diese und weitere gängige Methoden, z. B. die Vermeidung von Full Table Scans etc., sind mit Sicherheit sinnvoll. Aber es gibt die Möglichkeit mit Bind-Variablen/Prepared Statements zu arbeiten. Bei jeder Abfrage wird im Cache nachgesehen, ob die Abfrage bereits existiert. Wenn nicht, muss Oracle diese parsen und analysieren, im Cache speichern und dann die Daten auslesen. Bei vielen ähnlichen Abfragen ist dieser Prozess natürlich sehr zeitaufwändig. Bind-Variablen stellen die Möglichkeit bereit, eine Query sozusagen zu abstrahieren:SELECT LAST_NAME, JOB_ID FROM EMPLOYEES WHERE JOB_ID = 'SH_CLERK'; SELECT LAST_NAME, JOB_ID FROM EMPLOYEES WHERE JOB_ID = 'SA_REP'; SELECT LAST_NAME, JOB_ID FROM EMPLOYEES WHERE JOB_ID = 'AD_PRES';
$stmt = oci_parse($conn, 'SELECT LAST_NAME, JOB_ID FROM EMPLOYEES WHERE JOB_ID = :JOB_ID'); $jobId = 'SH_CLERK'; oci_bind_by_name($stmt, 'JOB_ID', $jobId); oci_execute($stmt);
[…] mit: Teil 2 Alle Teile: Teil 1, Teil 2, Teil 3, Teil 4, Teil 5, Teil 6 Be the first to share this article with your network! […]