Einführung - autoPrepare & autoExecute

Einführung - autoPrepare & autoExecute – Automatische Vorbereitung und Ausführung von SQL-Anweisungen

Description

Zweck

autoPrepare() und autoExecute() verringern den Aufwand langweilige INSERT oder UPDATE-SQL-Abfragen zu schreiben, welche schwer zu pflegen sind, wenn z.B. eine neue Spalte ergänzt wird.

Nehmen wir an, dass Sie eine Tabelle user mit 3 Spalten (id,name und country) benutzen. Dann müssten Sie Anweisungen schreiben wie:

INSERT INTO table (id, name, country) VALUES (?, ?, ?)
UPDATE table SET id=?, name=?, country=? WHERE ...

Wenn Sie ein Feld hinzufügen (z.B. birthYear), dann müssen alle entsprechenden Anfragen umgeschrieben werden. Eine langweilige Sache und fehleranfällig, wenn man eine im Quelltext übersieht.

autoPrepare

Mit autoPrepare() müssen Sie keine INSERT oder UPDATE-SQL-Abfragen mehr schreiben. Z.B.:

<?php
// Wir haben ein DB-Objekt namens $db...
$table_name   'user';
$table_fields = array('id''name''country');

$sth $db->autoPrepare($table_name$table_fields,
                        
DB_AUTOQUERY_INSERT);

if (
PEAR::isError($sth)) {
    die(
$sth->getMessage());
}
?>

In diesem Beispiel erzeugt autoPrepare() die folgende SQL-Abfrage:

INSERT INTO user (id, name, country) VALUES (?, ?, ?)

Mit dieser Abfrage wird prepare() aufgerufen.

Um Datensätze einzufügen, müssen Sie die execute()- oder executeMultiple()-Methode aufrufen:

<?php
// ... contining from the example above...
$table_values = array(1'Fabien''France');

$res =& $db->execute($sth$table_values);

if (
PEAR::isError($res)) {
    die(
$res->getMessage());
}
?>

Genauso funktioniert es auch mit UPDATE-Abfragen. Sie müssen für diesen Fall lediglich die WHERE-Klausel formulieren:

<?php
// Wir haben ein DB-Objekt namens $db...
$table_name   'user';
$table_fields = array('name''country');
$table_values = array('Bob''USA');

$sth $db->autoPrepare($table_name$table_fields,
                        
DB_AUTOQUERY_UPDATE'id = 1');

if (
PEAR::isError($sth)) {
    die(
$sth->getMessage());
}

$res =& $db->execute($sth$table_values);

if (
PEAR::isError($res)) {
    die(
$res->getMessage());
}
?>

autoPrepare() wird die folgende Abfrage bauen:

UPDATE user SET name=?, country=? WHERE id=1

Auch hier ruft es mit der erzeugten Abfrage die prepare()-Methode auf.

Definieren Sie keine WHERE-Klausel werden alle Datensätze der Tabelle geändert!

autoExecute

autoExecute() ist der schnellste Weg, um INSERT oder UPDATE-Abfragen durchzuführen. Es ist eine Kombination aus autoPrepare() und execute().

Sie benötigen nur ein assoziatives Array (Schlüssel => Wert). Als Schlüssel dienen die Spaltenbezeichnungen und als deren Wert die einzutragenden Werte.

<?php
// Once you have a valid DB object named $db...
$table_name 'user';

$fields_values = array(
    
'id'      => 1,
    
'name'    => 'Fabien',
    
'country' => 'France'
);

$res $db->autoExecute($table_name$fields_values,
                        
DB_AUTOQUERY_INSERT);

if (
PEAR::isError($res)) {
    die(
$res->getMessage());
}
?>

Damit wird die folgende Abfrage erzeugt und ausgeführt:

INSERT INTO user (id, name, country)
  VALUES (1, 'Fabien', 'France')

Analog laufen UPDATE-Abfragen ab:

<?php
// Wir haben ein DB-Objekt namens $db...
$table_name 'user';

$fields_values = array(
    
'name'    => 'Fabien',
    
'country' => 'France'
);

$res $db->autoExecute($table_name$fields_values,
                        
DB_AUTOQUERY_UPDATE'id = 1');

if (
PEAR::isError($res)) {
    die(
$res->getMessage());
}
?>

Die folgende Abfrage wird erzeugt und ausgeführt:

UPDATE user SET name='Fabien', country='France'
  WHERE id = 1

Seien Sie vorsichtig! Wenn Sie keine WHERE-Klausel angeben, werden alle Datensätze der Tabelle geändert.

Die übergebene Werte müssen Literale sein. Übergebene Sie keine SQL-Funktionen, wie z.B. CURDATE(). SQL-Funktionen, die zur Laufzeit aufgerufen werden sollen, müssen sich in der zu präparierenden Anfrage befinden.

Vorbereitung und Ausführung von SQL-Anweisungen (Previous) Funktionen zur Portabilität zwischen Datenbanken (Next)
Last updated: Sun, 19 Dec 2010 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

There are no user contributed notes for this page.