SO ich habe folgendes festgestellt:
Es gibt in dieser Drupal-Installation folgende Funktion
function _db_query_callback($match, $init = FALSE) {
static $args = NULL;
if ($init) {
$args = $match;
return;
}
switch ($match[1]) {
case '%d': // We must use type casting to int to convert FALSE/NULL/(TRUE?)
$value = array_shift($args);
// Do we need special bigint handling?
if ($value > PHP_INT_MAX) {
$precision = ini_get('precision');
@ini_set('precision', 16);
$value = sprintf('%.0f', $value);
@ini_set('precision', $precision);
}
else {
$value = (int) $value;
}
// We don't need db_escape_string as numbers are db-safe.
return $value;
case '%s':
return db_escape_string(array_shift($args));
case '%n':
// Numeric values have arbitrary precision, so can't be treated as float.
// is_numeric() allows hex values (0xFF), but they are not valid.
$value = trim(array_shift($args));
return is_numeric($value) && !preg_match('/x/i', $value) ? $value : '0';
case '%%':
return '%';
case '%f':
return (float) array_shift($args);
case '%b': // binary data
return db_encode_blob(array_shift($args));
}
}
Diese Funktion wandelt den String "%film und utopie%" um in "0film und utopie%" und damit kann es kein Ergebnis geben. Bei Großschreibung passiert das nicht und bei vorliegen eines doppelten %% ebenfalls nicht, da nur das jeweils erste %-Zeichen entfernt wird.
Frage: wie verhindere ich das, denn die Funktion wird ja ihre Berechtigung haben? Warum wird "%f" umgewandelt?