Kdyby\Doctrine\Diagnostics\SimpleParameterFormatter::format PHP Method

format() public static method

public static format ( mixed $param ) : mixed
$param mixed
return mixed
    public static function format($param)
    {
        if (is_int($param) || is_float($param)) {
            return $param;
        } elseif (is_string($param)) {
            return "'" . addslashes($param) . "'";
        } elseif (is_null($param)) {
            return "NULL";
        } elseif (is_bool($param)) {
            return $param ? "TRUE" : "FALSE";
        } elseif (is_array($param)) {
            $formatted = [];
            foreach ($param as $value) {
                $formatted[] = self::format($value);
            }
            return implode(', ', $formatted);
        } elseif ($param instanceof \Datetime) {
            /** @var \Datetime $param */
            return "'" . $param->format('Y-m-d H:i:s') . "'";
        } elseif (is_object($param)) {
            return get_class($param) . (method_exists($param, 'getId') ? '(' . $param->getId() . ')' : '');
        } else {
            return @"'{$param}'";
        }
    }

Usage Example

Beispiel #1
0
 /**
  * @param string $query
  * @param array $params
  * @param array $types
  * @param \Doctrine\DBAL\Platforms\AbstractPlatform $platform
  * @throws \Doctrine\DBAL\DBALException
  * @throws \Nette\Utils\RegexpException
  * @return string
  */
 public static function formatQuery($query, $params, array $types = [], AbstractPlatform $platform = NULL)
 {
     if (!$platform) {
         $platform = new Doctrine\DBAL\Platforms\MySqlPlatform();
     }
     if (!$types) {
         foreach ($params as $key => $param) {
             if (is_array($param)) {
                 $types[$key] = Doctrine\DBAL\Connection::PARAM_STR_ARRAY;
             } else {
                 $types[$key] = 'string';
             }
         }
     }
     try {
         list($query, $params, $types) = \Doctrine\DBAL\SQLParserUtils::expandListParameters($query, $params, $types);
     } catch (Doctrine\DBAL\SQLParserUtilsException $e) {
     }
     $formattedParams = [];
     foreach ($params as $key => $param) {
         if (isset($types[$key])) {
             if (is_scalar($types[$key]) && array_key_exists($types[$key], Type::getTypesMap())) {
                 $types[$key] = Type::getType($types[$key]);
             }
             /** @var Type[] $types */
             if ($types[$key] instanceof Type) {
                 $param = $types[$key]->convertToDatabaseValue($param, $platform);
             }
         }
         $formattedParams[] = SimpleParameterFormatter::format($param);
     }
     $params = $formattedParams;
     if (Nette\Utils\Validators::isList($params)) {
         $parts = explode('?', $query);
         if (count($params) > $parts) {
             throw new Kdyby\Doctrine\InvalidStateException("Too mny parameters passed to query.");
         }
         return implode('', Kdyby\Doctrine\Helpers::zipper($parts, $params));
     }
     return Strings::replace($query, '~(\\:[a-z][a-z0-9]*|\\?[0-9]*)~i', function ($m) use(&$params) {
         if (substr($m[0], 0, 1) === '?') {
             if (strlen($m[0]) > 1) {
                 if (isset($params[$k = substr($m[0], 1)])) {
                     return $params[$k];
                 }
             } else {
                 return array_shift($params);
             }
         } else {
             if (isset($params[$k = substr($m[0], 1)])) {
                 return $params[$k];
             }
         }
         return $m[0];
     });
 }
SimpleParameterFormatter