/** * 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)); } }
/** * 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)); } }