Versions Compared

Key

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

...

"Named parameters" should not be confused with prepared statements. Database driver that support prepared statements parse the SQL statement once and reuse this on consecutive uses whereas this version perform the substitution on every call!

prepare()

Die neue Funktion The new method cDb::prepare() ist im Grunde identisch mit der is nearly itentical to cDb::query() , bis auf 2 Punkte.

...

with two exceptions

  1. Whilq cDb::query() die Anweisung auch ausführt, liefert executes the statement, cDb::prepare() die aufbereitete Anweisung zurückjust returns the prepared statement.
  2. cDb::prepare() kann man nicht mit einem Parameter, also nur mit der SQL-Anweisung, aufrufen.

...

  1. cannot be called with a single parameter, i.e. the SQL statement.

Occasionally you don't wanr to execute an SQL statement in place, but prepare it, e.g. for logging purposes. This is where cDb::prepare() is handy.

1. Variant

Erster Parameter ist die SQL-Anweisung in Form eines Formatierungsstrings ist und weitere Parameter die Werte, die mit den Formatierungs-Anweisungen in der SQL-Anweisung verarbeitet werdenThe first is the SQL statement in which subsequent parameters will be embedded. The embedding will be performed in a way similar to formatting values with a format string.

Code Block
languagephp
linenumberstrue
// string prepare(string $statement [, mixed $args [, mixed $... ]])
$sql = $db->prepare('SELECT * FROM `%s` WHERE idart = %d AND idlang = %d', $cfg['tab']['art_lang'], $idart, $idlang);
$db->query($sql);

2. Variant

Aufruf mit 2 Parametern, wobei der erste Parameter die SQL-Anweisung in Form eines Formatierungsstrings ist und der zweite Parameter eine indexbasierte Liste mit Werten, die mit den Formatierungs-Anweisungen in der SQL-Anweisung verarbeitet werdenCall with exactly two parameters, the SQL statement as in the first variant and, as second parameter, an array containing all values that should be used for substitution.

Code Block
languagephp
linenumberstrue
// string prepare(string $statement, array $values)
$values = array($cfg['tab']['art_lang'], $idart, $idlang);
$sql = $db->prepare('SELECT * FROM `%s` WHERE idart = %d AND idlang = %d', $values);
$db->query($sql);

3. Variant

Aufruf mit 2 Parameters und als Call with exactly two parameters with "named Parameterparameters" Version. Der erste Parameter ist die SQL-Anweisung und verwendet zu ersetzende Platzhalter. Der zweite Parameter ist eine assoziative Liste mit Werten, die zu ersetzen sind. The first parameter is the SQL statement as in the first variant and, as second parameter, an associative array containing all values that should be used for substitution.

Code Block
languagephp
linenumberstrue
// string prepare(string $statement, array $values)
$values = array(
    'table_art_lang' => $cfg['tab']['art_lang'],
    'idart' => (int) $idart,
    'idlang' => (int) $idlang
);
$sql = $db->prepare('SELECT * FROM `:table_art_lang` WHERE idart = :idart AND idlang = :idlang', $values);
$db->query($sql);

...