Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagephp
linenumberstrue
// string buildInsert(string $tablename, array $fields)

$idcatart = 12;
$idlang = 1;
$idclient = 1;
$code = "<html>... code n' fun ...</html>";

$fields = array(
    'idcatart' => (int) $idcatart,
    'idlang' => (int) $idlang,
    'idclient' => (int) $idclient,
    'code' => $code,
);

$cfg = cRegistry::getConfig();

$db = cRegistry::getDb();
$sql = $db->buildInsert($cfg['tab']['code'], $fields);
$result = $db->query($sql);

update()

Die neue Funktion update() ist zum Aktualisieren eines vorhandenen Datensatzes gedacht. Es kann als Alternative zum manuellen Erstellen einen UPDATE-Statements verwendet werden.

Das manuelle Zusammenstellen eines UPDATE-Statements sieht in der Regel folgendermaßen aus:

Code Block
languagephp
linenumberstrue
$idcode = 123;

...


$code = "<html>... more code n' fun ...</html>";

...


$cfg = cRegistry::getConfig();

...


$db = cRegistry::getDb();

...


$sql = "UPDATE ".$cfg["tab"]["code"]." SET code = '".cSecurity::escapeDB($code, $db)."'

...


        WHERE idcode = " . cSecurity::toInteger($idcode);

...


$db->query($sql);

Mit update() gibt es dafür eine andere Alternative. Der erste Parameter ist der Name der Tabelle und der zweite Parameter ist ein assoziatives Array in der die Schlüssel die Feldnamen und die Werte die Werte für die Felder sind. Außerdem gibt es einen dritten Parameter der ein assoziatives Array ist und die WHERE-Bedingungen enthält.// bool

Code Block
languagephp
linenumberstrue
// bool update(string $tablename, array $fields, array $where)

...



$idcode = 123;

...


$code = "<html>... more code n' fun ...</html>";

...



$fields = array(

...


    'code' => $code,

...


);

...


$where = array(

...


    'idcode' => (int) $idcode

...


);

...


$cfg = cRegistry::getConfig();

...


$db = cRegistry::getDb();

...


$result = $db->update($cfg['tab']['code'], $fields, $where);

Auch hier sollte man sicherheitshalber Werte, die vom Typ Integer sein sollen, auch als solches casten. Strings muss man nicht escapen.

Hat der dritte Parameter mehrere WHERE-Bedingungen, werden diese mit AND verknüpft.

buildUpdate()

Während update() die Anweisung zusammenbaut und auch gleich ausführt, liefert buildUpdate() die zusammengebaute Anweisung zurück.

Code Block
languagephp
linenumberstrue
// string buildUpdate(string $tablename, array $fields, array $where)

...



$idcode = 123;

...


$code = "<html>... more code n' fun ...</html>";

...



$fields = array(

...


    'code' => $code,

...


);

...


$where = array(

...


    'idcode' => (int) $idcode

...


);

...



$cfg = cRegistry::getConfig();

...


$db = cRegistry::getDb();

...


$sql = $db->buildUpdate($cfg['tab']['code'], $fields, $where);

...


$result = $db->query($sql);

toArray()

Dei neue Funktion toArray() liefert den aktuellen Datensatz, als Array zurück. Dabei ist es möglich den Datensatz als assoziatives und/oder indexiertes Array zurückzuliefern. Per default wird ein assoziatives Array zurückgeliefert.

Code Block
languagephp
linenumberstrue
// string toArray(string $fetchmode)

...



$idlang = 1;

...


$idart = 2;

...


$cfg = cRegistry::getConfig();

...


$db = cRegistry::getDb();

...


$sql = $db->prepare('SELECT * FROM `%s` WHERE idart = %d AND idlang = %d', $cfg['tab']['art_lang'], $idart, $idlang);

...


$db->query($sql);

...


if ($db->nextRecord())

...

 {
    $assocRs = $db->toArray(); // oder mit Parameter cDbDriverHandler::FETCH_ASSOC

...


    echo "<pre>\$assocRs: " . print_r($assocRs, true) . "<pre>";

...



    $indexedRs = $db->toArray(cDbDriverHandler::FETCH_NUMERIC);

...


    echo "<pre>\$indexedRs: " . print_r($indexedRs, true) . "<pre>";

...



    $bothdRs = $db->toArray(cDbDriverHandler::FETCH_BOTH);

...


    echo "<pre>\$bothdRs: " . print_r($bothdRs, true) . "<pre>";

...


}

toObject()

Dei neue Funktion toObject() liefert den aktuellen Datensatz, als Objekt zurück das eine Instanz von stdClass ist (Standard Klasse in PHP). Die Eigenschaften des Objekts entsprechen den Feldnamen der Tabelle.

Code Block
languagephp
linenumberstrue
// string toObject(string $fetchmode)

...



$idlang = 1;

...


$idart = 2;

...


$cfg = cRegistry::getConfig();

...


$db = cRegistry::getDb();

...


$sql = $db->prepare('SELECT * FROM `%s` WHERE idart = %d AND idlang = %d', $cfg['tab']['art_lang'], $idart, $idlang);

...


$db->query($sql);

...


if ($db->nextRecord())

...

 {
    $rs = $db->toObject();

...


    echo "<pre>\$rs: " . print_r($rs, true) . "<pre>";

...



    echo "<pre>idartlang: " . $rs->idartlang . "<pre>";

...


    echo "<pre>title: " . $rs->title . "<pre>";

...


    echo "<pre>author: " . $rs->author . "<pre>";

...


}

escape()

Mit der neuen Funktion escape() kann man Variablen vom Typ String bei Bedarf escapen. Diese Funktion ist eine Alternative zu cSecurity::escapeDB().

Code Block
languagephp
linenumberstrue
// string escape(string $str)

...



$db = cRegistry::getDb();

...



$code = "<html>... more code n' fun ...</html>";

...



$escapedCode = $db->escape($code);

...



// Zuvor war dies folgendermaßen möglich

...



$db = cRegistry::getDb();

...



$code = "<html>... more code n' fun ...</html>";

...



$escapedCode = cSecurity::escapeDB($code, $db);

Das waren die wichtigsten Neuerungen in den Datenbank-Klassen cDb und Eltern-Klassen. Entwickler haben nun mehr Möglichkeiten, um SQL-Anweisungen zu generieren, zum Teil ist das Erstellen der SQL-Anweisungen einfacher sowie lesbarer geworden und der Sicherheitsaspekt wurde zum Teil in die DB-Adapter verlagert.