vendor/doctrine/dbal/src/Driver/PDO/Statement.php line 136

Open in your IDE?
  1. <?php
  2. namespace Doctrine\DBAL\Driver\PDO;
  3. use Doctrine\DBAL\Driver\Exception as ExceptionInterface;
  4. use Doctrine\DBAL\Driver\Exception\UnknownParameterType;
  5. use Doctrine\DBAL\Driver\Result as ResultInterface;
  6. use Doctrine\DBAL\Driver\Statement as StatementInterface;
  7. use Doctrine\DBAL\ParameterType;
  8. use Doctrine\Deprecations\Deprecation;
  9. use PDO;
  10. use PDOException;
  11. use PDOStatement;
  12. use function array_slice;
  13. use function func_get_args;
  14. use function func_num_args;
  15. final class Statement implements StatementInterface
  16. {
  17.     private const PARAM_TYPE_MAP = [
  18.         ParameterType::NULL => PDO::PARAM_NULL,
  19.         ParameterType::INTEGER => PDO::PARAM_INT,
  20.         ParameterType::STRING => PDO::PARAM_STR,
  21.         ParameterType::ASCII => PDO::PARAM_STR,
  22.         ParameterType::BINARY => PDO::PARAM_LOB,
  23.         ParameterType::LARGE_OBJECT => PDO::PARAM_LOB,
  24.         ParameterType::BOOLEAN => PDO::PARAM_BOOL,
  25.     ];
  26.     private PDOStatement $stmt;
  27.     /** @internal The statement can be only instantiated by its driver connection. */
  28.     public function __construct(PDOStatement $stmt)
  29.     {
  30.         $this->stmt $stmt;
  31.     }
  32.     /**
  33.      * {@inheritdoc}
  34.      */
  35.     public function bindValue($param$value$type ParameterType::STRING)
  36.     {
  37.         if (func_num_args() < 3) {
  38.             Deprecation::trigger(
  39.                 'doctrine/dbal',
  40.                 'https://github.com/doctrine/dbal/pull/5558',
  41.                 'Not passing $type to Statement::bindValue() is deprecated.'
  42.                     ' Pass the type corresponding to the parameter being bound.',
  43.             );
  44.         }
  45.         $type $this->convertParamType($type);
  46.         try {
  47.             return $this->stmt->bindValue($param$value$type);
  48.         } catch (PDOException $exception) {
  49.             throw Exception::new($exception);
  50.         }
  51.     }
  52.     /**
  53.      * {@inheritDoc}
  54.      *
  55.      * @deprecated Use {@see bindValue()} instead.
  56.      *
  57.      * @param mixed    $param
  58.      * @param mixed    $variable
  59.      * @param int      $type
  60.      * @param int|null $length
  61.      * @param mixed    $driverOptions The usage of the argument is deprecated.
  62.      */
  63.     public function bindParam(
  64.         $param,
  65.         &$variable,
  66.         $type ParameterType::STRING,
  67.         $length null,
  68.         $driverOptions null
  69.     ): bool {
  70.         Deprecation::trigger(
  71.             'doctrine/dbal',
  72.             'https://github.com/doctrine/dbal/pull/5563',
  73.             '%s is deprecated. Use bindValue() instead.',
  74.             __METHOD__,
  75.         );
  76.         if (func_num_args() < 3) {
  77.             Deprecation::trigger(
  78.                 'doctrine/dbal',
  79.                 'https://github.com/doctrine/dbal/pull/5558',
  80.                 'Not passing $type to Statement::bindParam() is deprecated.'
  81.                     ' Pass the type corresponding to the parameter being bound.',
  82.             );
  83.         }
  84.         if (func_num_args() > 4) {
  85.             Deprecation::triggerIfCalledFromOutside(
  86.                 'doctrine/dbal',
  87.                 'https://github.com/doctrine/dbal/issues/4533',
  88.                 'The $driverOptions argument of Statement::bindParam() is deprecated.',
  89.             );
  90.         }
  91.         $type $this->convertParamType($type);
  92.         try {
  93.             return $this->stmt->bindParam(
  94.                 $param,
  95.                 $variable,
  96.                 $type,
  97.                 $length ?? 0,
  98.                 ...array_slice(func_get_args(), 4),
  99.             );
  100.         } catch (PDOException $exception) {
  101.             throw Exception::new($exception);
  102.         }
  103.     }
  104.     /**
  105.      * {@inheritdoc}
  106.      */
  107.     public function execute($params null): ResultInterface
  108.     {
  109.         if ($params !== null) {
  110.             Deprecation::trigger(
  111.                 'doctrine/dbal',
  112.                 'https://github.com/doctrine/dbal/pull/5556',
  113.                 'Passing $params to Statement::execute() is deprecated. Bind parameters using'
  114.                     ' Statement::bindParam() or Statement::bindValue() instead.',
  115.             );
  116.         }
  117.         try {
  118.             $this->stmt->execute($params);
  119.         } catch (PDOException $exception) {
  120.             throw Exception::new($exception);
  121.         }
  122.         return new Result($this->stmt);
  123.     }
  124.     /**
  125.      * Converts DBAL parameter type to PDO parameter type
  126.      *
  127.      * @param int $type Parameter type
  128.      *
  129.      * @throws ExceptionInterface
  130.      */
  131.     private function convertParamType(int $type): int
  132.     {
  133.         if (! isset(self::PARAM_TYPE_MAP[$type])) {
  134.             throw UnknownParameterType::new($type);
  135.         }
  136.         return self::PARAM_TYPE_MAP[$type];
  137.     }
  138. }