vendor/doctrine/dbal/src/Logging/Statement.php line 74

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Doctrine\DBAL\Logging;
  4. use Doctrine\DBAL\Driver\Middleware\AbstractStatementMiddleware;
  5. use Doctrine\DBAL\Driver\Result as ResultInterface;
  6. use Doctrine\DBAL\Driver\Statement as StatementInterface;
  7. use Doctrine\DBAL\ParameterType;
  8. use Psr\Log\LoggerInterface;
  9. use function array_slice;
  10. use function func_get_args;
  11. final class Statement extends AbstractStatementMiddleware
  12. {
  13.     /** @var LoggerInterface */
  14.     private $logger;
  15.     /** @var string */
  16.     private $sql;
  17.     /** @var array<int,mixed>|array<string,mixed> */
  18.     private $params = [];
  19.     /** @var array<int,int>|array<string,int> */
  20.     private $types = [];
  21.     /**
  22.      * @internal This statement can be only instantiated by its connection.
  23.      */
  24.     public function __construct(StatementInterface $statementLoggerInterface $loggerstring $sql)
  25.     {
  26.         parent::__construct($statement);
  27.         $this->logger $logger;
  28.         $this->sql    $sql;
  29.     }
  30.     /**
  31.      * {@inheritdoc}
  32.      */
  33.     public function bindParam($param, &$variable$type ParameterType::STRING$length null)
  34.     {
  35.         $this->params[$param] = &$variable;
  36.         $this->types[$param]  = $type;
  37.         return parent::bindParam($param$variable$type, ...array_slice(func_get_args(), 3));
  38.     }
  39.     /**
  40.      * {@inheritdoc}
  41.      */
  42.     public function bindValue($param$value$type ParameterType::STRING)
  43.     {
  44.         $this->params[$param] = $value;
  45.         $this->types[$param]  = $type;
  46.         return parent::bindValue($param$value$type);
  47.     }
  48.     /**
  49.      * {@inheritdoc}
  50.      */
  51.     public function execute($params null): ResultInterface
  52.     {
  53.         $this->logger->debug('Executing statement: {sql} (parameters: {params}, types: {types})', [
  54.             'sql'    => $this->sql,
  55.             'params' => $params ?? $this->params,
  56.             'types'  => $this->types,
  57.         ]);
  58.         return parent::execute($params);
  59.     }
  60. }