Esempio n. 1
0
/**
 * Helper function for db_query().
 */
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 mysql_real_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 (double) array_shift($args);
        case '%b':
            // binary data
            return db_encode_blob(array_shift($args));
    }
}
Esempio n. 2
0
/**
 * Helper function for db_query().
 */
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?)
    return (int) array_shift($args); // We don't need db_escape_string as numbers are db-safe
  case '%s':
    return db_escape_string(array_shift($args));
  case '%%':
    return '%';
  case '%f':
    return (float) array_shift($args);
  case '%b': // binary data
    return db_encode_blob(array_shift($args));
  case '%l': // large number
    return db_large_number(array_shift($args));
  }
}