Beschreibung
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.
Warnung |
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.
|